package Ġio . ho op it . android . fire bas ere al time . core Ċ Ċ import Ġcom . google . firebase . database . Query Ċ import Ġcom . google . firebase . database . core . view . Query Spec Ċ import Ġio . ho op it . android . fire bas ere al time . cache . Firebase List Cache Ċ import Ġio . ho op it . android . fire bas ere al time . cache . Firebase Value Cache Ċ import Ġio . ho op it . android . fire bas ere al time . paging . Firebase Paged List Cache Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠFirebase Cache ( ĊĠĠĠ Ġprivate Ġval Ġfirebase Scope : ĠFirebase Scope Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġitem Caches Ġ= Ġmutable Map Of < K Class <* >, ĠFirebase Value Cache <* >>() ĊĠĠĠ Ġprivate Ġval Ġpage d List Cache Ġ= Ġmutable Map Of < Query Spec , ĠFirebase Paged List Cache < *, Ġ* >>() ĊĠĠĠ Ġprivate Ġval Ġlist Cache Ġ= Ġmutable Map Of < Query Spec , ĠFirebase List Cache < *, Ġ* >>() ĊĊĠĠĠ Ġfun Ġdispose ( query Spec : ĠQuery Spec ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpage d List Cache [ query Spec ]?. dispose () ĊĠĠĠĠĠĠĠ Ġpage d List Cache . remove ( query Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠgetItem Cache ( clazz : ĠK Class < T >): ĠFirebase Value Cache < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġitem Caches . get Or Put ( clazz ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Value Cache ( firebase Scope , Ġclazz ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠFirebase Value Cache < T > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< K Ġ: ĠComparable < K >, ĠT Ġ: ĠFirebase Scoped Resource > Ġget OrCreate Paged Cache ( ĊĠĠĠĠĠĠĠ Ġquery : ĠQuery , ĊĠĠĠĠĠĠĠ Ġdescending : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġclass Model : ĠK Class < T >, ĊĠĠĠĠĠĠĠ Ġorder ByKey : Ġ( T ) Ġ-> ĠK ĊĠĠĠ Ġ): ĠFirebase Paged List Cache < K , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġconsider Ġatt aching Ġinitial Ġlistener Ġimmediately ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġpage d List Cache . get Or Put ( query . spec ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Paged List Cache ( firebase Scope , Ġquery , Ġdescending , Ġclass Model , Ġorder ByKey ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠFirebase Paged List Cache < K , ĠT > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< K Ġ: ĠComparable < K >, ĠT Ġ: ĠFirebase Scoped Resource > Ġget OrCreate List Cache ( ĊĠĠĠĠĠĠĠ Ġquery : ĠQuery , ĊĠĠĠĠĠĠĠ Ġclazz : ĠK Class < T >, ĊĠĠĠĠĠĠĠ Ġorder ByKey : Ġ( T ) Ġ-> ĠK ĊĠĠĠ Ġ): ĠFirebase List Cache < K , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġlist Cache . getOrElse ( query . spec ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase List Cache ( firebase Scope , Ġquery , Ġclazz , Ġorder ByKey ) ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister List Query Cache ( it , Ġquery ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠFirebase List Cache < K , ĠT > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister List Query Cache ( cache : ĠFirebase List Cache < *, Ġ* >, Ġquery : ĠQuery ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Cache . get Or Put ( query . spec ) Ġ{ Ġcache Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġscope Ġ= Ġfirebase Scope . getResource ( cache . query ) Ċ // ĠĠĠĠĠĠĠ Ġscope . addListener ( cache . getChild Listener ()) ĊĠĠĠ Ġ} Ċ } Ċ