package Ġcom . anim sh . mov iem . data . view models Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . anim sh . mov iem . data . database . entity . Favorite TV Entity Ċ import Ġcom . anim sh . mov iem . data . repositories . Repository Ċ import Ġcom . anim sh . mov iem . models . movie . Credits Response Ċ import Ġcom . anim sh . mov iem . models . tv . TV Ċ import Ġcom . anim sh . mov iem . models . tv . Tv Response Ċ import Ġcom . anim sh . mov iem . models . tv . episodes . Season Response Ċ import Ġcom . anim sh . mov iem . util . Constants Ċ import Ġcom . anim sh . mov iem . util . Network Result Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . Response Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġanim sh Ġon Ġ 2 / 2 8 / 2 0 2 1 . Ċ Ġ*/ Ċ @ H ilt ViewModel Ċ class ĠT v ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠRepository , ĊĠĠĠ Ġapplication : ĠApplication Ċ ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġ// ĠRoom ĊĠĠĠ Ġvar Ġread Fav TV : ĠLive Data < List < Favorite TV Entity >> Ġ= ĊĠĠĠĠĠĠĠ Ġrepository . local . read Fav T vs (). as LiveData () ĊĊĠĠĠ Ġfun Ġinsert Fav TV ( favorite TV Entity : ĠF avorite TV Entity ) Ġ= ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . local . insert Fav TV ( favorite TV Entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Fav TV ( favorite TV Entity : ĠF avorite TV Entity ) Ġ= ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . local . delete Fav TV ( favorite TV Entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete All Fav T Vs () Ġ= ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . local . delete All Fav T Vs () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġonline ĊĠĠĠ Ġvar Ġchosen Season : ĠMutable LiveData < Int > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġsearch Choice : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġmy List Choice : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġfun Ġset Season ( season Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchosen Season . value Ġ= Ġseason Number ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Search Choice ( choice : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Choice . value Ġ= Ġchoice ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset My List Choice ( choice : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy List Choice . value Ġ= Ġchoice ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġlatest Tv Response : ĠMutable LiveData < Network Result < TV >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġtv Details Response : ĠMutable LiveData < Network Result < TV >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġsimilar Tv Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġrecommended Tv Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġcredit Response : ĠMutable LiveData < Network Result < Credits Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġtv On Air Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġtv A iring Today Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġpopular Tv O Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġtop Tv Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġtrend ing Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġsearch Response : ĠMutable LiveData < Network Result < Tv Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġvar Ġseason Response : ĠMutable LiveData < Network Result < Season Response >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġfun Ġget Latest Tv ( apiKey : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Latest Tv Safe C All ( apiKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Tv Details ( tv Id : ĠInt , ĠapiKey : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Tv Details Safe C All ( tv Id , ĠapiKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Similar Tv ( tv Id : ĠInt , ĠapiKey : ĠString , Ġpage : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Similar Tv Safe Call ( tv Id , ĠapiKey , Ġpage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Recommended Tv ( tv Id : ĠInt , ĠapiKey : ĠString , Ġpage : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Recommended Tv Safe Call ( tv Id , ĠapiKey , Ġpage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Credits Tv ( tv Id : ĠInt , ĠapiKey : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Credit Safe Call ( tv Id , ĠapiKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget On Air Tv ( apiKey : ĠString , Ġpage : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget On Air Tv Safe Call ( apiKey , Ġpage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget A iring Today ( apiKey : ĠString , Ġpage : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget A iring Today Safe Call ( apiKey , Ġpage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget T VE p isode ( tv Id : ĠInt , Ġseason Number : ĠInt , ĠapiKey : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget T VE p isode Safe Call ( tv Id , Ġseason Number , ĠapiKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Tv Show ( apiKey : ĠString , Ġquery : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch TV Show Safe Call ( apiKey , Ġquery ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsearch TV Show Safe Call ( apiKey : ĠString , Ġquery : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . search TV Show ( apiKey , Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" o ĠT v ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget T VE p isode Safe Call ( tv Id : ĠInt , Ġseason Number : ĠInt , ĠapiKey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseason Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . getT VE p isode s ( tv Id , Ġseason Number , ĠapiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseason Response . value Ġ= Ġhandle Season Response ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseason Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" Tv ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseason Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget A iring Today Safe Call ( apiKey : ĠString , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv A iring Today Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get Tv A iring Today ( apiKey , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv A iring Today Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv A iring Today Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" Tv ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv A iring Today Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Pop ular Tv ( apiKey : ĠString , Ġpage : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Pop ular Tv Safe Call ( apiKey , Ġpage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Pop ular Tv Safe Call ( apiKey : ĠString , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpopular Tv O Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get Pop ular Tv ( apiKey , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopular Tv O Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopular Tv O Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" o ĠT v ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopular Tv O Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Top Tv ( apiKey : ĠString , Ġpage : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Top Tv Safe Call ( apiKey , Ġpage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Top Tv Safe Call ( apiKey : ĠString , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtop Tv Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get Top Tv ( apiKey , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Tv Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" 0 ĠT v ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Trend ing Tv ( apiKey : ĠString , Ġpage : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġget Trend ing Tv Safe Call ( apiKey , Ġpage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Trend ing Tv Safe Call ( apiKey : ĠString , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrend ing Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get Trend ing Tv ( apiKey , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrend ing Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrend ing Response . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Result . Error ( message Ġ= Ġe . message Ġ+ Ġ" 0 ĠTV ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrend ing Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget On Air Tv Safe Call ( apiKey : ĠString , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv On Air Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get On Air Tv ( apiKey , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv On Air Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv On Air Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" TV ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv A iring Today Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Similar Tv Safe Call ( tv Id : ĠInt , ĠapiKey : ĠString , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsimilar Tv Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get Similar TV Details ( tv Id , ĠapiKey , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimilar Tv Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimilar Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" Tv ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimilar Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Recommended Tv Safe Call ( tv Id : ĠInt , ĠapiKey : ĠString , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecommended Tv Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get Recommendation TV Details ( tv Id , ĠapiKey , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecommended Tv Response . value Ġ= Ġhandle ListResponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecommended Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" Tv ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecommended Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Credit Safe Call ( tv Id : ĠInt , ĠapiKey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcredit Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . getT VC red its Details ( tv Id , ĠapiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredit Response . value Ġ= Ġhandle Credit Response ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredit Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" Tv ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredit Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Credit Response ( response : ĠResponse < Credits Response >): ĠNetwork Result < Credits Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message (). toString (). contains (" timeout ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Timeout !! !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . code () Ġ== Ġ 4 0 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Quota ĠEx ceeded !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body () Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Credits Ġnot Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Successful Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredits Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Success ( credits !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġresponse . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle ListResponse ( response : ĠResponse < Tv Response >): ĠNetwork Result < Tv Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message (). toString (). contains (" timeout ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Timeout !! !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . code () Ġ== Ġ 4 0 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Quota ĠEx ceeded !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body () Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Tv Ġnot Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Successful Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Success ( tv !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġresponse . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Latest Tv Safe C All ( apiKey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlatest Tv Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get Latest TV ( apiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Tv Response . value Ġ= Ġhandle Response ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" Tv ĠNot ĠFound !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Tv Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Tv Details Safe C All ( tv Id : ĠInt , ĠapiKey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv Details Response . value Ġ= ĠNetwork Result . Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( Constants . has Internet Connection ( getApplication ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . remote . get TV Details ( tv Id , ĠapiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Details Response . value Ġ= Ġhandle Response ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Details Response . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Result . Error ( message Ġ= Ġ" Tv ĠNot ĠFound !! " Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Details Response . value Ġ= ĠNetwork Result . Error ( message Ġ= Ġ" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Response ( response : ĠResponse < TV >): ĠNetwork Result < TV > Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message (). toString (). contains (" timeout ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Timeout !! !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . code () Ġ== Ġ 4 0 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Quota ĠEx ceeded !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body () Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Tv Ġnot Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Successful Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Success ( tv !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġresponse . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Season Response ( response : ĠResponse < Season Response >): ĠNetwork Result < Season Response >? Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message (). toString (). contains (" timeout ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Timeout !! !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . code () Ġ== Ġ 4 0 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Quota ĠEx ceeded !! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body () Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġ" Season Ġnot Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Successful Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Success ( tv !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNetwork Result . Error ( message Ġ= Ġresponse . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }