package Ġcash . z . ecc . android . sdk . internal . transaction Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . paging . Paged List Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . room . Room Database Ċ import Ġcash . z . ecc . android . sdk . db . entity . Confirmed Transaction Ċ import Ġcash . z . ecc . android . sdk . exception . Repository Exception Ċ import Ġcash . z . ecc . android . sdk . ext . Z cash Sdk Ċ import Ġcash . z . ecc . android . sdk . internal . db . Account Dao Ċ import Ġcash . z . ecc . android . sdk . internal . db . Block Dao Ċ import Ġcash . z . ecc . android . sdk . internal . db . Derived Data Db Ċ import Ġcash . z . ecc . android . sdk . internal . db . Transaction Dao Ċ import Ġcash . z . ecc . android . sdk . internal . ext . android . Refresh able DataSource Factory Ċ import Ġcash . z . ecc . android . sdk . internal . ext . android . to Flow Paged List Ċ import Ġcash . z . ecc . android . sdk . internal . ext . android . to Refresh able Ċ import Ġcash . z . ecc . android . sdk . internal . ext . try Warn Ċ import Ġcash . z . ecc . android . sdk . internal . twig Ċ import Ġcash . z . ecc . android . sdk . jni . Rust Backend Ċ import Ġcash . z . ecc . android . sdk . type . Unified Address Account Ċ import Ġcash . z . ecc . android . sdk . type . Unified View ing Key Ċ import Ġcash . z . ecc . android . sdk . type . Wallet Birth day Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . emit All Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ /** Ċ Ġ* ĠExample Ġof Ġa Ġrepository Ġthat Ġleverage s Ġthe ĠRoom Ġpaging Ġlibrary Ġto Ġreturn Ġa Ġ[ Paged List ] Ġof Ċ Ġ* Ġtransactions . ĠCon sum ers Ġcan Ġregister Ġas Ġa Ġpage Ġlistener Ġand Ġreceive Ġan Ġinterface Ġthat Ġallows Ġfor Ċ Ġ* Ġefficiently Ġpaging Ġdata . Ċ Ġ* Ċ Ġ* Ġ@ param ĠpageSize Ġtransactions Ġper Ġpage . ĠThis Ġinflu ences Ġpre - fetch Ġand Ġmemory Ġconfiguration . Ċ Ġ*/ Ċ class ĠP aged Transaction Repository ( ĊĠĠĠ Ġval Ġapp Context : ĠContext , ĊĠĠĠ Ġval ĠpageSize : ĠInt Ġ= Ġ 1 0 , ĊĠĠĠ Ġval Ġrust Backend : ĠRust Backend , ĊĠĠĠ Ġval Ġbirthday : ĠWallet Birth day , ĊĠĠĠ Ġval Ġviewing Keys : ĠList < Unified View ing Key >, ĊĠĠĠ Ġval Ġoverwrite V ks : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ: ĠTransaction Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlazy Ġ= ĠLazy Property Holder () ĊĊĠĠĠ Ġoverride Ġval Ġreceived Transactions Ġget () Ġ= Ġlazy . received Transactions ĊĠĠĠ Ġoverride Ġval Ġsent Transactions Ġget () Ġ= Ġlazy . sent Transactions ĊĠĠĠ Ġoverride Ġval Ġall Transactions Ġget () Ġ= Ġlazy . all Transactions ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠTransaction Repository ĠAPI ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ= Ġlazy . all Transactions Factory . refresh () ĊĊĠĠĠ Ġoverride Ġfun Ġlast Sc anned Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlazy . blocks . last Sc anned Height () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfirst Sc anned Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlazy . blocks . first Sc anned Height () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Initialized (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlazy . blocks . count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfind Encoded Transaction ById ( tx Id : ĠLong ) Ġ= Ġwith Context ( IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlazy . transactions . find Encoded Transaction ById ( tx Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfind New Transactions ( block Height Range : ĠInt Range ): ĠList < Confirmed Transaction > Ġ= ĊĠĠĠĠĠĠĠ Ġlazy . transactions . findAll Transactions By Range ( block Height Range . first , Ġblock Height Range . last ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfind M ined Height ( raw Transaction Id : ĠByteArray ) Ġ= Ġwith Context ( IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlazy . transactions . find M ined Height ( raw Transaction Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfind Matching Transaction Id ( raw Transaction Id : ĠByteArray ): ĠLong ? Ġ= ĊĠĠĠĠĠĠĠ Ġlazy . transactions . find Matching Transaction Id ( raw Transaction Id ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcleanup Cancelled Tx ( raw Transaction Id : ĠByteArray ) Ġ= Ġlazy . transactions . cleanup Cancelled Tx ( raw Transaction Id ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Expired ( last Sc anned Height : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlet Ġexpired Ġtransactions Ġl inger Ġin Ġthe ĠUI Ġfor Ġa Ġlittle Ġwhile ĊĠĠĠĠĠĠĠ Ġreturn Ġlazy . transactions . delete Expired ( last Sc anned Height Ġ- Ġ( Z cash Sdk . EXPI RY _ OFFSET Ġ/ Ġ 2 )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcount (): ĠInt Ġ= Ġwith Context ( IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlazy . transactions . count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Account ( accountId : ĠInt ): ĠUn ified Address Account ? Ġ= Ġlazy . accounts . find Account ById ( accountId ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Account Count (): ĠInt Ġ= Ġlazy . accounts . count () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lazy . is Prepared . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtw ig (" Warning : Ġskipped Ġthe Ġpreparation Ġstep Ġbecause Ġwe 're Ġalready Ġprepared !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtw ig (" Pre paring Ġrepository Ġfor Ġuse ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Missing Databases () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprovide Ġthe Ġdatabase Ġto Ġall Ġthe Ġlazy Ġproperties Ġthat Ġare Ġwaiting Ġfor Ġit Ġto Ġexist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlazy . db Ġ= Ġbuild Database () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Key Migrations () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġany Ġdatabases Ġthat Ġdon 't Ġalready Ġexist Ġvia ĠRust . ĠOrigin ally , Ġthis Ġwas Ġdone Ġon Ġthe ĠRust ĊĠĠĠĠ Ġ* Ġside Ġbecause ĠRust Ġwas Ġintended Ġto Ġown Ġthe Ġ" data Db " Ġand ĠKotlin Ġjust Ġreads Ġfrom Ġit . ĠSince Ġthen , ĊĠĠĠĠ Ġ* Ġit Ġhas Ġbeen Ġmore Ġclear Ġthat ĠKotlin Ġshould Ġown Ġthe Ġdata Ġand Ġjust Ġlet ĠRust Ġuse Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġinit Missing Databases () Ġ{ ĊĠĠĠĠĠĠĠ Ġmaybe Create Data Db () ĊĠĠĠĠĠĠĠ Ġmaybe Init Blocks Table ( birthday ) ĊĠĠĠĠĠĠĠ Ġmaybe Init Accounts Table ( view ing Keys ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġthe Ġdata Db Ġand Ġits Ġtable , Ġif Ġit Ġdoesn 't Ġexist . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġmaybe Create Data Db () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Warn (" Warning : Ġdid Ġnot Ġcreate Ġdata Db . ĠIt Ġprobably Ġalready Ġexists .") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrust Backend . init Data Db () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtw ig (" Initialized Ġwallet Ġfor Ġfirst Ġrun Ġfile : Ġ${ rust Backend . path Data Db }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġthe Ġblocks Ġtable Ġwith Ġthe Ġgiven Ġbirthday , Ġif Ġneeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġmaybe Init Blocks Table ( birthday : ĠWallet Birth day ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġconsider Ġconverting Ġthese Ġto Ġtyped Ġexceptions Ġin Ġthe Ġwel ding Ġlayer ĊĠĠĠĠĠĠĠ Ġtry Warn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Warning : Ġdid Ġnot Ġinitialize Ġthe Ġblocks Ġtable . ĠIt Ġprobably Ġwas Ġalready Ġinitialized .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Contains Ġ= Ġ" table Ġis Ġnot Ġempty " ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrust Backend . init Blocks Table ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbirthday . height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbirthday . hash , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbirthday . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbirthday . tree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtw ig (" see ded Ġthe Ġdatabase Ġwith Ġsap ling Ġtree Ġat Ġheight Ġ${ birthday . height }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtw ig (" database Ġfile : Ġ${ rust Backend . path Data Db }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġthe Ġaccounts Ġtable Ġwith Ġthe Ġgiven Ġviewing Ġkeys . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġmaybe Init Accounts Table ( view ing Keys : ĠList < Unified View ing Key >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġconsider Ġconverting Ġthese Ġto Ġtyped Ġexceptions Ġin Ġthe Ġwel ding Ġlayer ĊĠĠĠĠĠĠĠ Ġtry Warn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Warning : Ġdid Ġnot Ġinitialize Ġthe Ġaccounts Ġtable . ĠIt Ġprobably Ġwas Ġalready Ġinitialized .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Contains Ġ= Ġ" table Ġis Ġnot Ġempty " ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrust Backend . init Accounts Table (* view ing Keys . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtw ig (" Initialized Ġthe Ġaccounts Ġtable Ġwith Ġ${ view ing Keys . size } Ġviewing Key ( s )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild Ġthe Ġdatabase Ġand Ġapply Ġmigrations . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Database (): ĠDerived Data Db Ġ{ ĊĠĠĠĠĠĠĠ Ġtw ig (" Building Ġdata Db Ġand Ġapplying Ġmigrations ") ĊĠĠĠĠĠĠĠ Ġreturn ĠRoom . database Builder ( app Context , ĠDerived Data Db :: class . java , Ġrust Backend . path Data Db ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Journal Mode ( Room Database . Journal Mode . TRUNC ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Migrations ( Derived Data Db . M IG RATION _ 3 _ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Migrations ( Derived Data Db . M IG RATION _ 4 _ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Migrations ( Derived Data Db . M IG RATION _ 4 _ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Migrations ( Derived Data Db . M IG RATION _ 5 _ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Migrations ( Derived Data Db . M IG RATION _ 6 _ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġdocument Ġwhy Ġwe Ġdo Ġthis . ĠMy Ġguess Ġis Ġto Ġcatch Ġdatabase Ġissues Ġearly Ġor Ġto Ġtrigger Ġmigrations -- I Ġforget Ġwhy Ġit Ġwas Ġadded Ġbut Ġthere Ġwas Ġa Ġgood Ġreason ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . open Helper . writable Database . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . open Helper . writable Database . end Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġapply Key Migrations () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( overwrite V ks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtw ig (" apply ing Ġkey Ġmigrations Ġ. Ġ. Ġ. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaybe Init Accounts Table ( view ing Keys ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġthe Ġunderlying Ġdatabase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlazy . db ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : Ġbegin Ġconverting Ġthese Ġinto ĠData ĠAccess ĠAPI . ĠFor Ġnow , Ġjust Ġcollect Ġthe Ġdesired Ġoperations Ġand Ġiterate / refactor , Ġlater ĊĠĠĠ Ġfun Ġfind Block Hash ( height : ĠInt ): ĠByteArray ? Ġ= Ġlazy . blocks . find Hash By Height ( height ) ĊĠĠĠ Ġfun Ġget Transaction Count (): ĠInt Ġ= Ġlazy . transactions . count () ĊĊĠĠĠ Ġ// ĠTODO : Ġconvert Ġthis Ġinto Ġa Ġwallet Ġrepository Ġrather Ġthan Ġ" transaction Ġrepository " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġclass Ġthat Ġholds Ġall Ġthe Ġproperties Ġthat Ġdepend Ġon Ġthe Ġdatabase Ġbeing Ġprepared . ĠIf Ġany ĊĠĠĠĠ Ġ* Ġproperties Ġare Ġaccessed Ġbefore Ġthen , Ġit Ġresults Ġin Ġan ĠUn prepared ĠException . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠLazy Property Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Prepared Ġ= ĠAtomic Boolean ( false ) ĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠDerived Data Db ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Prepared . set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrigger Ġ= ĠMutable State Flow ( false ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDA Os ĊĠĠĠĠĠĠĠ Ġval Ġblocks : ĠBlock Dao Ġby Ġlazy Db Ġ{ Ġdb !!. block Dao () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġaccounts : ĠAccount Dao Ġby Ġlazy Db Ġ{ Ġdb !!. account Dao () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtransactions : ĠTransaction Dao Ġby Ġlazy Db Ġ{ Ġdb !!. transaction Dao () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTransaction ĠFlow s ĊĠĠĠĠĠĠĠ Ġval Ġall Transactions Factory : ĠRefresh able DataSource Factory < Int , ĠConf irmed Transaction > Ġby Ġlazy Db Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions . getAll Transactions (). to Refresh able () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġall Transactions Ġ= Ġflow < List < Confirmed Transaction >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġemit Ġa Ġplaceholder Ġwhile Ġwe Ġawait Ġthe Ġdb Ġto Ġbe Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger . first Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit All ( all Transactions Factory . to Flow Paged List ( pageSize )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġreceived Transactions Ġ= Ġflow < List < Confirmed Transaction >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġemit Ġa Ġplaceholder Ġwhile Ġwe Ġawait Ġthe Ġdb Ġto Ġbe Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger . first Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit All ( transactions . get Received Transactions (). to Refresh able (). to Flow Paged List ( pageSize )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsent Transactions Ġ= Ġflow < List < Confirmed Transaction >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġemit Ġa Ġplaceholder Ġwhile Ġwe Ġawait Ġthe Ġdb Ġto Ġbe Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger . first Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit All ( transactions . get Sent Transactions (). to Refresh able (). to Flow Paged List ( pageSize )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġis Prepared Ġis Ġtrue , Ġexecute Ġthe Ġgiven Ġblock Ġand Ġcache Ġthe Ġvalue , Ġalways Ġreturning Ġit ĊĠĠĠĠĠĠĠĠ Ġ* Ġto Ġfuture Ġrequests . ĠOtherwise , Ġthrow Ġan ĠUn prepared Ġexception . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġ< T > Ġlazy Db ( cross inline Ġblock : Ġ() Ġ-> ĠT ) Ġ= Ġobject Ġ: ĠLazy < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcached : ĠT ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue : ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġcached Ġ?: Ġif Ġ( is Prepared . get ()) Ġblock () Ġelse Ġthrow ĠRepository Exception . Un prepared ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Initialized (): ĠBoolean Ġ= Ġcached Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ