package Ġcom . hy os ak ura . image hub . util Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroidx . room . Database Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . room . Room Database Ċ import Ġandroidx . sqlite . db . Support SQLite Database Ċ import Ġcom . hy os ak ura . image hub . dao . Folder Dao Ċ import Ġcom . hy os ak ura . image hub . dao . History Dao Ċ import Ġcom . hy os ak ura . image hub . dao . Image Dao Ċ import Ġcom . hy os ak ura . image hub . dao . Tag Dao Ċ import Ġcom . hy os ak ura . image hub . entity . Folder Entity Ċ import Ġcom . hy os ak ura . image hub . entity . History Entity Ċ import Ġcom . hy os ak ura . image hub . entity . Image Entity Ċ import Ġcom . hy os ak ura . image hub . entity . Tag Entity Ċ import Ġcom . hy os ak ura . image hub . entity . relation . Image Tag Cross Ref Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ Ċ @ Database ( ĊĠĠĠ Ġentities Ġ= Ġ[ Image Entity :: class , ĠFolder Entity :: class , ĠTag Entity :: class , ĠImage Tag Cross Ref :: class , ĠHistory Entity :: class ], ĊĠĠĠ Ġversion Ġ= Ġ 1 , ĊĠĠĠ Ġexport Schema Ġ= Ġfalse Ċ ) Ċ abstract Ġclass ĠApp Database Ġ: ĠRoom Database () Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġimage Dao (): ĠImage Dao ĊĠĠĠ Ġabstract Ġfun Ġfolder Dao (): ĠFolder Dao ĊĠĠĠ Ġabstract Ġfun Ġtag Dao (): ĠTag Dao ĊĠĠĠ Ġabstract Ġfun Ġhistory Dao (): ĠHistory Dao ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠINSTANCE : ĠApp Database ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠLong . to LocalDateTime (): ĠLocalDateTime Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= ĠInstant . of Epoch Milli ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzone Ġ= ĠZone Id . system Default () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLocalDateTime . of Instant ( instant , Ġzone ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Database ( application : ĠActivity ): ĠApp Database Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠRoom . database Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Database :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" image hub ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( object Ġ: ĠCallback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġscope Ġ= ĠCor outine Scope ( Supervisor Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Open ( db : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Open ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . folder Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . insert Folders ( Folder Entity ( folder Id Ġ= Ġ- 1 , ĠparentId Ġ= Ġ- 2 , Ġname Ġ= Ġ" æĹł æĸĩä»¶å¤¹ ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE ?. image Dao ()?. getAll Deleted Images ()?. collect Ġ{ Ġlist -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Time Ġ= Ġit . delete Time !!. to LocalDateTime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠSystem . currentTimeMillis (). to LocalDateTime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Duration . between ( delete Time , Ġcurrent ). to Days () Ġ>= Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE ?. image Dao ()?. remove Deleted Images ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ