package Ġcom . rer ere . iw ara 4 a . ui . screen . image Ċ Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . rer ere . iw ara 4 a . data . api . google . Translator API Ċ import Ġcom . rer ere . iw ara 4 a . data . dao . App Database Ċ import Ġcom . rer ere . iw ara 4 a . data . dao . insert Smart ly Ċ import Ġcom . rer ere . iw ara 4 a . data . model . comment . Comment Ċ import Ġcom . rer ere . iw ara 4 a . data . model . comment . Comment Post Param Ċ import Ġcom . rer ere . iw ara 4 a . data . model . detail . image . Image Detail Ċ import Ġcom . rer ere . iw ara 4 a . data . model . history . History Data Ċ import Ġcom . rer ere . iw ara 4 a . data . model . history . History Type Ċ import Ġcom . rer ere . iw ara 4 a . data . model . index . MediaType Ċ import Ġcom . rer ere . iw ara 4 a . data . model . session . Session Manager Ċ import Ġcom . rer ere . iw ara 4 a . data . repo . Media Repo Ċ import Ġcom . rer ere . iw ara 4 a . ui . component . Media QueryParam Ċ import Ġcom . rer ere . iw ara 4 a . ui . component . Page List Provider Ċ import Ġcom . rer ere . iw ara 4 a . util . Data State Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠImage ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġsaved State Handle : ĠSaved State Handle , ĊĠĠĠ Ġprivate Ġval Ġsession Manager : ĠSession Manager , ĊĠĠĠ Ġprivate Ġval Ġmedia Repo : ĠMedia Repo , ĊĠĠĠ Ġprivate Ġval Ġdatabase : ĠApp Database , ĊĠĠĠ Ġprivate Ġval Ġtranslator API : ĠTrans lator API Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġimage Id : ĠString Ġ= ĠcheckNotNull ( saved State Handle [" image Id "]) ĊĠĠĠ Ġvar Ġimage Detail Ġ= ĠMutable State Flow < Data State < Image Detail >>( Data State . Empty ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Detail . value Ġ= ĠData State . Loading ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmedia Repo . getImage Detail ( session Manager . session , Ġimage Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( response . is Success ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Detail . value Ġ= ĠData State . Success ( response . read ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinsert Ġhistory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . get History Dao (). insert Smart ly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġresponse . read (). title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Ġ= Ġresponse . read (). image Links . get OrNull ( 0 ) Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Ġ= Ġ" image /$ image Id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Type Ġ= ĠHistory Type . IMAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Detail . value Ġ= ĠData State . Error ( response . errorMessage ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġtranslate ( text : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtranslator API . translate ( text ) Ġ?: Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcomment Pager Provider Ġ= Ġobject Ġ: ĠPage List Provider < Comment > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlast Loading Page Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdata Ġ= ĠMutable State Flow < Data State < List < Comment >> >( Data State . Empty ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġhas Next Ġby Ġmutable State Of ( true ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= ĠData State . Loading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmedia Repo . load Comment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= Ġsession Manager . session , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= ĠMediaType . IMAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġimage Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġlast Loading Page Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= ĠData State . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . comments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġresponse . hasNext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= ĠData State . Error ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload ( page : ĠInt , Ġquery Param : ĠMedia QueryParam ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Ġ== Ġlast Loading Page ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= ĠData State . Loading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmedia Repo . load Comment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= Ġsession Manager . session , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= ĠMediaType . IMAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġimage Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġpage Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= ĠData State . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . comments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġresponse . hasNext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Loading Page Ġ= Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= ĠData State . Error ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Page (): ĠFlow < Data State < List < Comment >>> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhas Next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Reply ( ĊĠĠĠĠĠĠĠ Ġcontent : ĠString , ĊĠĠĠĠĠĠĠ Ġnid : ĠInt , ĊĠĠĠĠĠĠĠ Ġcomment Id : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġcomment Post Param : ĠComment Post Param , ĊĠĠĠĠĠĠĠ Ġon Finished : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Repo . post Comment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= Ġsession Manager . session , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnid Ġ= Ġnid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Id Ġ= Ġcomment Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Post Param Ġ= Ġcomment Post Param , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Finished () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }