package Ġcom . rav n ner der y . data . repository Ċ Ċ import Ġandroidx . paging .* Ċ import Ġcom . rav n ner der y . data . database . Database Dao Ċ import Ġcom . rav n ner der y . data . database . models . Preferences Entity Ċ import Ġcom . rav n ner der y . data . network . Characters Paging DataSource Ċ import Ġcom . rav n ner der y . domain . models .* Ċ import Ġcom . rav n ner der y . domain . repository . Main Repository Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠMain Repository Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠdataSource : ĠChar acters Paging DataSource , ĊĠĠĠ Ġprivate Ġval Ġdatabase Dao : ĠDatabase Dao , Ċ ) Ġ: ĠMain Repository Ġ{ ĊĠĠĠ Ġprivate Ġvar ĠviewModel Job Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ ĠviewModel Job ) ĊĊĠĠĠ Ġ@ Opt In ( Experimental Paging Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġprovide Characters Paging (): ĠFlow < Paging Data < Character >> Ġ= ĠP ager ( ĊĠĠĠĠĠĠĠ Ġconfig Ġ= ĠP aging Config ( pageSize Ġ= Ġ 2 0 ), ĊĠĠĠ Ġ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource ĊĠĠĠ Ġ}. flow ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Preference ( key : ĠString , Ġpref : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġui Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Dao . insert Preference ( Preferences Entity ( api Id Ġ= Ġkey , Ġpreference Ġ= Ġpref )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Preferences (): ĠFlow < List < Preference >> Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Dao . getAll Preferences (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map To Domain Model () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. flow On ( Dispatch ers . IO ) Ċ }