/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠAl gor and , ĠInc . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense Ċ Ġ*/ Ċ Ċ package Ġcom . al gor and . android . ui . notification center Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroidx . paging . Paging Source Ċ import Ġcom . al gor and . android . core . Account Manager Ċ import Ġcom . al gor and . android . database . Contact Dao Ċ import Ġcom . al gor and . android . models . Account Ċ import Ġcom . al gor and . android . models . Notification Item Ċ import Ġcom . al gor and . android . models . Notification ListItem Ċ import Ġcom . al gor and . android . models . Notification Type Ċ import Ġcom . al gor and . android . models . Result Ċ import Ġcom . al gor and . android . models . User Ċ import Ġcom . al gor and . android . repository . Notification Repository Ċ import Ġcom . al gor and . android . utils . AL GO _ DECIMAL S Ċ import Ġcom . al gor and . android . utils . format Amount Ċ import Ġcom . al gor and . android . utils . get Al gor and Mobile Date Formatter Ċ import Ġcom . al gor and . android . utils . getUser If Saved Loc ally Ċ import Ġcom . al gor and . android . utils . parse Formatted Date Ċ import Ġcom . al gor and . android . utils . preference . get Notification UserId Ċ import Ġjava . time . Z onedDateTime Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠNotification DataSource ( ĊĠĠĠ Ġprivate Ġval Ġnotification Repository : ĠNotification Repository , ĊĠĠĠ Ġprivate Ġval Ġshared Pref : ĠSharedPreferences , ĊĠĠĠ Ġprivate Ġval Ġcontact Dao : ĠContact Dao , ĊĠĠĠ Ġaccount Manager : ĠAccount Manager Ċ ) Ġ: ĠP aging Source < String , ĠNotification ListItem >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġaccount List Ġ= Ġaccount Manager . get Accounts () ĊĊĠĠĠ Ġprivate Ġvar Ġcached Contact List : ĠList < User >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġnotification UserId : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < String >): ĠLoad Result < String , ĠNotification ListItem > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Key Ġ= Ġparams . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġif Ġ( current Key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Repository . get Notifications ( get Notification UserId ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Repository . get Notifications More ( current Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġwhen Ġ( response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġresponse . data . results . toList Items ( get Cached Contacts (), Ġaccount List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Key Ġ= Ġresponse . data . next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( list , Ġcurrent Key , Ġnext Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error < String , ĠNotification ListItem >( response . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error < String , ĠNotification ListItem >( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġerrors Ġin Ġthis Ġblock Ġand Ġreturn ĠLoad Result . Error Ġif Ġit Ġis Ġan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexpected Ġerror Ġ( such Ġas Ġa Ġnetwork Ġfailure ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Notification UserId (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnotification UserId Ġ?: Ġ( shared Pref . get Notification UserId ()?. also Ġ{ Ġnew Notification UserId Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification UserId Ġ= Ġnew Notification UserId ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠException (" Notification ĠUser ĠID Ġcouldn 't Ġfound ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Cached Contacts (): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Contact List Ġ?: Ġcontact Dao . getAll (). also Ġ{ Ġcontacts In Database Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Contact List Ġ= Ġcontacts In Database ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Notification Item >. toList Items ( ĊĠĠĠĠĠĠĠ Ġcontact List : ĠList < User >, ĊĠĠĠĠĠĠĠ Ġaccount List : ĠList < Account > ĊĠĠĠ Ġ): ĠList < Notification ListItem > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠZ onedDateTime . now () ĊĠĠĠĠĠĠĠ Ġval Ġnow In Time Millis Ġ= Ġnow . to Instant (). to Epoch Milli () ĊĠĠĠĠĠĠĠ Ġval Ġdate Formatter Ġ= Ġget Al gor and Mobile Date Formatter () ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Ġ{ Ġnotification Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreation Z onedDateTime Ġ= Ġnotification Item . creation Date . parse Formatted Date ( date Formatter ) Ġ?: Ġnow ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender User Ġ= ĠgetUser If Saved Loc ally ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Item . metadata ?. sender PublicKey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver User Ġ= ĠgetUser If Saved Loc ally ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Item . metadata ?. receiver PublicKey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecimals Ġ= Ġnotification Item . metadata ?. get Asset Description ()?. decimals Ġ?: ĠAL GO _ DECIMAL S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Amount Ġ= Ġnotification Item . metadata ?. amount . format Amount ( decimals ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Difference Ġ= Ġnow In Time Millis Ġ- Ġcreation Z onedDateTime . to Instant (). to Epoch Milli () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification ListItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġnotification Item . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġnotification Item . type Ġ?: ĠNotification Type . UNKNOWN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreation DateTime Ġ= Ġcreation Z onedDateTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Difference Ġ= Ġtime Difference , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Amount Ġ= Ġformatted Amount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfallback Message Ġ= Ġnotification Item . message . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender User Ġ= Ġsender User , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver User Ġ= Ġreceiver User , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Ġ= Ġnotification Item . metadata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ