package Ġcom . fl am yo ad . ts uk iv iew er . repository Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . room . with Transaction Ċ import Ġcom . fl am yo ad . ts uk iv iew er . db . App Database Ċ import Ġcom . fl am yo ad . ts uk iv iew er . db . dao . Collection Criteria Dao Ċ import Ġcom . fl am yo ad . ts uk iv iew er . db . dao . Collection Dao Ċ import Ġcom . fl am yo ad . ts uk iv iew er . db . dao . Collection D ou jin Dao Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model .* Ċ import Ġcom . fl am yo ad . ts uk iv iew er . model . Collection Ċ import Ġjava . io . File Ċ Ċ class ĠCollection Repository ( context : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdb : ĠApp Database Ġ= ĠApp Database . getInstance ( context ) ĊĊĠĠĠ Ġprivate Ġval Ġcollection Dao : ĠCollection Dao ĊĠĠĠ Ġprivate Ġval Ġcriteria Dao : ĠCollection Criteria Dao ĊĠĠĠ Ġprivate Ġval Ġcollection D ou jin Dao : ĠCollection D ou jin Dao ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcollection Dao Ġ= Ġdb . collection Dao () ĊĠĠĠĠĠĠĠ Ġcriteria Dao Ġ= Ġdb . collection Criteria Dao () ĊĠĠĠĠĠĠĠ Ġcollection D ou jin Dao Ġ= Ġdb . collection D ou jin Dao () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget ( id : ĠLong ): ĠCollection Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcollection Dao . get Blocking ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetAll (): ĠList < Collection > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcollection Dao . getAll Blocking () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll With C riter ias (): ĠLive Data < List < Collection With C riter ias >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcollection Dao . getAll With C riter ias () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll With C riter ias ( keyword : ĠString ): ĠLive Data < List < Collection With C riter ias >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcollection Dao . getAll With C riter ias ( keyword ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġinsert ( collection : ĠCollection , Ġc riter ias : ĠList < Collection Criteria >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . with Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollection Id Ġ= Ġcollection Dao . insert ( collection ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġediting Ġexisting Ġcollection , Ġw ipe Ġall Ġprevious Ġc riter ias Ġbefore Ġinserting Ġnew Ġones ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria Dao . delete ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Dao . delete Thumbnail ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġin Ġc riter ias Ġwith Ġcollection Id , Ġwhich Ġis Ġimpossible Ġto Ġget Ġbefore Ġfirst Ġinserting Ġthe Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted C riter ias Ġ= Ġc riter ias . map Ġ{ Ġcriteria Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Criteria ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Id Ġ= Ġcollection Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġcriteria . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġcriteria . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Name Ġ= Ġcriteria . value Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( criteria Ġin Ġcompleted C riter ias ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria Dao . insert ( criteria ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete ( collection Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . with Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Dao . delete ( collection Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria Dao . delete ( collection Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIt 's Ġok Ġto Ġuse ĠINSERT Ġfor Ġnew / old Ġbecause Ġon Conflict Strategy Ġis ĠREPLACE ĊĠĠĠ Ġsuspend Ġfun Ġupdate ( c riter ias : ĠList < Collection Criteria >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . with Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( criteria Ġin Ġc riter ias ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria Dao . insert ( criteria ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate Thumbnail ( collection Id : ĠLong ?, Ġfile : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( collection Id Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġcollection Dao . update Thumbnail ( collection Id , Ġfile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Titles ( id : ĠLong ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcriteria Dao . getTitle s Blocking ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Included Tags ( id : ĠLong ): ĠList < Tag > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcriteria Dao . get Included Tags Blocking ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Excluded Tags ( id : ĠLong ): ĠList < Tag > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcriteria Dao . get Excluded Tags Blocking ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Directories ( id : ĠLong ): ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcriteria Dao . get Directories Blocking ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsearch Included Or Excluded Or ( ĊĠĠĠĠĠĠĠ Ġincluded Tags : ĠList < Tag >, ĊĠĠĠĠĠĠĠ Ġexcluded Tags : ĠList < Tag > ĊĠĠĠ Ġ): ĠList < D ou jin Details > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincluded Tags Id Ġ= Ġincluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexcluded Tags Id Ġ= Ġexcluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( included Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Excluded Or ( excluded Tags Id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( excluded Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included Or ( included Tags Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included Or Excluded Or ( included Tags Id , Ġexcluded Tags Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsearch Included Or Excluded And ( ĊĠĠĠĠĠĠĠ Ġincluded Tags : ĠList < Tag >, ĊĠĠĠĠĠĠĠ Ġexcluded Tags : ĠList < Tag > ĊĠĠĠ Ġ): ĠList < D ou jin Details > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincluded Tags Id Ġ= Ġincluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexcluded Tags Id Ġ= Ġexcluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( included Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Excluded And ( excluded Tags Id , Ġexcluded Tags Id . size ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( excluded Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included Or ( included Tags Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included Or Excluded And ( included Tags Id , Ġexcluded Tags Id , Ġexcluded Tags . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsearch Included And Excluded Or ( ĊĠĠĠĠĠĠĠ Ġincluded Tags : ĠList < Tag >, ĊĠĠĠĠĠĠĠ Ġexcluded Tags : ĠList < Tag > ĊĠĠĠ Ġ): ĠList < D ou jin Details > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincluded Tags Id Ġ= Ġincluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexcluded Tags Id Ġ= Ġexcluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( included Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Excluded Or ( excluded Tags Id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( excluded Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included And ( included Tags Id , Ġincluded Tags Id . size ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included And Excluded Or ( included Tags Id , Ġexcluded Tags Id , Ġincluded Tags . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsearch Included And Excluded And ( ĊĠĠĠĠĠĠĠ Ġincluded Tags : ĠList < Tag >, ĊĠĠĠĠĠĠĠ Ġexcluded Tags : ĠList < Tag > ĊĠĠĠ Ġ): ĠList < D ou jin Details > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincluded Tags Id Ġ= Ġincluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexcluded Tags Id Ġ= Ġexcluded Tags . map Ġ{ Ġtag Ġ-> Ġtag . tag Id Ġ?: Ġ- 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( included Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Excluded And ( excluded Tags Id , Ġexcluded Tags Id . size ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( excluded Tags . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included And ( included Tags Id , Ġincluded Tags Id . size ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcollection D ou jin Dao . search Included And Excluded And ( included Tags Id , Ġexcluded Tags Id , Ġincluded Tags . size , Ġexcluded Tags . size ) ĊĠĠĠ Ġ} Ċ Ċ }