package Ġcom . m ith un . simple bible . view models Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . m ith un . simple bible . R Ċ import Ġcom . m ith un . simple bible . data . database . model . Book Ċ import Ġcom . m ith un . simple bible . data . model . Ver se Ċ import Ġcom . m ith un . simple bible . data . repository . Bible Repository Ċ import Ġcom . m ith un . simple bible . data . repository . Resource Ċ import Ġcom . m ith un . simple bible . data . repository . Ver ses Repository Ċ import Ġcom . m ith un . simple bible . utilities . Prefs Ċ import Ġcom . m ith un . simple bible . utilities . Resources Util Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Coroutine ExceptionHandler Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠSelection ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġb ible Repository : ĠBible Repository , ĊĠĠĠ Ġprivate Ġval Ġver ses Repository : ĠVer ses Repository , ĊĠĠĠ Ġprivate Ġval Ġresources Util : ĠResources Util , ĊĠĠĠ Ġprivate Ġval Ġprefs : ĠP refs Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// Ġver se Ġto Ġbe Ġfiltered Ġwhen Ġdisplaying Ġin Ġthe ĠUI ĊĠĠĠ Ġprivate Ġval Ġfilter Ver se Ġ= Ġ" intro " ĊĊĠĠĠ Ġval Ġchapter Number : ĠMutable State Flow < Int > Ġ= ĠMutable State Flow ( ĊĠĠĠĠĠĠĠ Ġprefs . last Read Chapter . split (". "). last (). toInt () ĊĠĠĠ Ġ) ĊĠĠĠ Ġvar Ġver se Number Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected Book Name : ĠMutable State Flow < String > Ġ= ĠMutable State Flow ("") ĊĠĠĠ Ġval Ġselected Book Name : ĠState Flow < String > Ġ= Ġ_ selected Book Name ĊĊĠĠĠ Ġprivate Ġval Ġ_ chapter Count : ĠMutable State Flow < Int > Ġ= ĠMutable State Flow ( 0 ) ĊĠĠĠ Ġval Ġchapter Count : ĠState Flow < Int > Ġ= Ġ_ chapter Count ĊĊĠĠĠ Ġprivate Ġval Ġ_ ver ses Count : ĠMutable State Flow < Int > Ġ= ĠMutable State Flow ( 0 ) ĊĠĠĠ Ġval Ġver ses Count : ĠState Flow < Int > Ġ= Ġ_ ver ses Count ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected Book Id : ĠMutable State Flow < String > Ġ= ĠMutable State Flow ( ĊĠĠĠĠĠĠĠ Ġprefs . last Read Chapter . split (". "). first () ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġselected Book Id : ĠState Flow < String > Ġ= Ġ_ selected Book Id ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected Chapter Id : ĠMutable State Flow < String > Ġ= ĠMutable State Flow ( ĊĠĠĠĠĠĠĠ Ġprefs . last Read Chapter ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġselected Chapter Id : ĠState Flow < String > Ġ= Ġ_ selected Chapter Id ĊĊĠĠĠ Ġ// Ġbooks Ġreturned Ġfrom Ġrepository ĊĠĠĠ Ġprivate Ġval Ġ_ books Ġ= ĠMutable State Flow < Resource < List < Book >> >( Resource . Loading ( emptyList ())) ĊĠĠĠ Ġval Ġbooks : ĠState Flow < Resource < List < Book >>> Ġ= Ġ_ books ĊĊĠĠĠ Ġ// Ġver ses Ġfor Ġa Ġselected Ġchapter ĊĠĠĠ Ġprivate Ġval Ġ_ ver ses Ġ= ĠMutable State Flow < Resource < List < Ver se >> >( Resource . Loading ( emptyList ())) ĊĠĠĠ Ġval Ġver ses : ĠState Flow < Resource < List < Ver se >>> Ġ= Ġ_ ver ses ĊĊĠĠĠ Ġ// Ġerror Ġhandling Ġthe Ġbooks Ġfetch Ġcall ĊĠĠĠ Ġprivate Ġval Ġbooks ExceptionHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠ Ġ_ books . value Ġ= ĠResource . Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . message Ġ?: Ġresources Util . getString ( R . string . error Generic String ), Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġerror Ġhandling Ġver ses Ġfetch Ġcall ĊĠĠĠ Ġprivate Ġval Ġver ses ExceptionHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠ Ġ_ ver ses . value Ġ= ĠResource . Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . message Ġ?: Ġresources Util . getString ( R . string . error Generic String ), Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġlist Ġof Ġbooks Ġfor Ġthe Ġselected Ġb ible Ġversion . ĊĠĠĠĠĠĠĠ Ġ// Ġselected Ġb ible Ġversion Ġis Ġstored Ġin Ġpreference . ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selected Chapter Id . collect Ġ{ Ġchapter Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Ver ses ( prefs . selected Bible Version Id , Ġchapter Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selected Book Id . collect Ġ{ Ġbook Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Books ( prefs . selected Bible Version Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Ver ses ( prefs . selected Bible Version Id , Ġ"$ book Id . 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset ĠBook Ġeg : ĠGEN , ĠEX O , ĠMAT ĊĠĠĠ Ġfun ĠsetSelected Book Id ( book Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Book Id . value Ġ= Ġbook Id ĊĠĠĠĠĠĠĠ ĠsetSelected Chapter Id ("$ book Id . 1 ") Ġ// Ġdefault Ġto Ġ 1 st Ġchapter Ġwhen Ġa Ġbook Ġis Ġselected ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset ĠBook Ġname Ġeg : ĠGen esis , ĠR om ans ĊĠĠĠ Ġfun ĠsetSelected Book Name ( book Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Book Name . value Ġ= Ġbook Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset ĠChapter Id Ġeg : ĠGEN . 1 , ĠMAT . 5 ĊĠĠĠ Ġfun ĠsetSelected Chapter Id ( chapter Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Chapter Id . value Ġ= Ġchapter Id ĊĠĠĠĠĠĠĠ Ġchapter Number . value Ġ= Ġchapter Id . split (". "). last (). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset Ġthe Ġnumber Ġof Ġthe Ġver se ĊĠĠĠ Ġfun ĠsetSelected Ver se Number ( verse Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . verse Number Ġ= Ġver se Number ĊĠĠĠĠĠĠĠ Ġprefs . last Read Chapter Ġ= Ġselected Chapter Id . value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Books ( bible Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ books . value Ġ= ĠResource . Loading ( null ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( books ExceptionHandler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb ible Books Ġ= Ġb ible Repository . get Books ( bible Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ chapter Count . value Ġ= Ġb ible Books . first Ġ{ Ġit . id Ġ== Ġselected Book Id . value Ġ}. chapter s . filter Ġ{ Ġit . number Ġ!= Ġfilter Ver se Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ books . value Ġ= ĠResource . Success ( bible Books ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Ver ses ( bible Id : ĠString , Ġchapter Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ ver ses . value Ġ= ĠResource . Loading ( null ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( ver ses ExceptionHandler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ver ses Repository . get Ver ses ( bible Id , Ġchapter Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ver ses . value Ġ= ĠResource . Success ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ver ses Count . value Ġ= Ġthis . count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ