package Ġru . z 1 3 . img tags . data Ċ Ċ import Ġandroid . content . Context Ċ import Ġio . reactivex . Comp letable Ċ import Ġru . z 1 3 . img tags . data . datasource . Room DataSource Ċ import Ġru . z 1 3 . img tags . data . entity . database . ImageData Ċ import Ġru . z 1 3 . img tags . data . entity . database . Image Tag Join Data Ċ import Ġru . z 1 3 . img tags . data . entity . database . Tag Data Ċ import Ġru . z 1 3 . img tags . domain . Domain Events Ċ import Ġru . z 1 3 . img tags . domain . Mutable Domain State Ċ Ċ /** Ċ Ġ* Ġ@ author ĠY ura ĠF Ġ( y ura - f . github . io ) Ċ Ġ*/ Ċ class ĠApp Repository ( private Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġroom DataSource : ĠRoom DataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdomain State : ĠMutable Domain State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdomain Events : ĠDomain Events ): ĠRepository Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Start Local Data (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain State . set Images ( room DataSource . getAll ImageData ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetSelected Image Path ( path : ĠString ?): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain State . setSelected Image Path ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Image ( image Data : ĠImage Data ?): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( image Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags List Ġ= Ġget Tags List ( image Data . tags ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( tags List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Data . tags Ġ= Ġtags List . join ToString ( limit Ġ= Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom DataSource . insert ImageData ( image Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġtags List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Data Ġ= ĠTag Data ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom DataSource . insert Tag Data ( tag Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom DataSource . insert Image Tag Join Data ( Image Tag Join Data ( image Id Ġ= Ġimage Data . path , Ġtag Id Ġ= Ġtag Data . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain State . set Images ( room DataSource . getAll ImageData ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll Images By Tags ( tags Str : ĠString ?): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags Str Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags List Ġ= Ġget Tags List ( tags Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( tags List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimages : ĠMutable List < ImageData > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tag Ġin Ġtags List ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimages . addAll ( room DataSource . getAll ImageData By Tag ( tag )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// remove Ġduplicates Ġwhen Ġthe Ġimage Ġhas Ġsome Ġtags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain State . set Images ( images . distinct ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain State . set Images ( room DataSource . getAll ImageData ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain State . set Images ( room DataSource . getAll ImageData ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Tags List ( str : ĠString ): ĠList < String >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstr . split ("\\ s *, [, \\ s ]* ". to Regex ()). filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠ Ġ} Ċ Ċ }