package Ġcom . bat tag li and rea . data . repository Ċ Ċ import Ġcom . bat tag li and rea . data . database . Room DataSource Ċ import Ġcom . bat tag li and rea . data . networking . Red dit Api DataSource Ċ import Ġcom . bat tag li and rea . domain . model . Image Ċ import Ġcom . bat tag li and rea . domain . repository . Image Repository Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton ĊĊ Ċ @ Singleton Ċ open Ġclass ĠImage Repository Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġre dd it Api DataSource : ĠRed dit Api DataSource , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom DataSource : ĠRoom DataSource Ċ ) Ġ: ĠImage Repository Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// / ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠ ĠI MAGES ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// // ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcache : ĠMutable List < Image > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġget ( force : ĠBoolean , Ġsearch : ĠString ): ĠList < Image > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( force ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre dd it Api DataSource . get Images ( search Ġ= Ġsearch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġremote Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . addAll ( remote Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook marks Ġ= Ġroom DataSource . get Book marks () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . map Ġ{ Ġimage Ġ-> Ġ Ġimage . is Book marked Ġ= Ġbook marks . find Ġ{ Ġit . id Ġ== Ġimage . id Ġ} Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcache ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclear Cache () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// / ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠ ĠBO OK MARK S ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// // ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Book marks (): ĠList < Image > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroom DataSource . get Book marks () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġimage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . is Book marked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġset Bookmark ( image : ĠImage ): ĠImage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . is Book marked Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom DataSource . insert Book marks ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . map Ġ{ cached Image Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cached Image . id Ġ== Ġimage . id ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Image . is Book marked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġimage ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġremove Bookmark ( image : ĠImage ): ĠImage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . is Book marked Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom DataSource . remove Book marks ( image . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . map Ġ{ ic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( ic . id Ġ== Ġimage . id ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġic . is Book marked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġimage ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ