package Ġcom . music player . a ow . deleg ates . data . source Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġcom . lit es uits . orm . Lite Orm Ċ import Ġcom . lit es uits . orm . db . ass it . QueryBuilder Ċ import Ġcom . lit es uits . orm . db . model . Conflict Algorithm Ċ import Ġcom . music player . a ow . R Ċ import Ġcom . music player . a ow . deleg ates . data . model . Folder Ċ import Ġcom . music player . a ow . deleg ates . data . model . Play List Ċ import Ġcom . music player . a ow . deleg ates . data . model . Song Ċ import Ġcom . music player . a ow . utils . DB Utils Ċ import Ġrx . Observable Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ internal Ġclass ĠApp Local DataSource ( private Ġval ĠmContext : ĠContext ?, Ġprivate Ġval Ġm Lite Orm : ĠLite Orm ?) Ġ: ĠApp Contract Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Default All S ongs (){ ĊĠĠĠĠĠĠĠ Ġval Ġplay Lists Ġ= Ġm Lite Orm ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create < Play List >( Play List :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Equals ( Play List . COLUMN _ NAME , ĠmContext ?. getString ( R . string . mp _ play _ list _ songs )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( play Lists ?. isEmpty () !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// create Ġall Ġsongs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall S ongs Ġ= ĠDB Utils . generate S ongs Play List ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. save ( all S ongs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Favorite ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfav Ġ= ĠDB Utils . generate Favorite Play List ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. save ( fav ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Now ĠPlay ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow p Ġ= ĠDB Utils . generate S ongs Now Playing ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. save ( now p ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPlay ĠList ĊĠĠĠ Ġoverride Ġfun Ġplay Lists (): ĠObservable < List < Play List >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay Lists Ġ= Ġm Lite Orm ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builder . create < Play List >( Play List :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where No Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay List . COLUMN _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmContext ?. getString ( R . string . mp _ play _ list _ now playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay Lists Ġ= Ġm Lite Orm !!. query ( Play List :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( play Lists Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFirst Ġquery , Ġcreate Ġthe Ġdefault Ġplay Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay List Ġ= ĠDB Utils . generate Favorite Play List ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. save ( play List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ"{{ Create Ġdefault Ġplaylist ( Favorite ) Ġwith Ġ" Ġ+ Ġif Ġ( result Ġ== Ġ 1 L Ġ) Ġ" success " Ġelse Ġ" failure }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Lists ?. add ( play List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( play Lists ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplaylist ( name : ĠString ): ĠObservable < Play List >{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Ġ= Ġm Lite Orm ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builder . create < Play List >( Play List :: class . java ). where Equals ( Play List . COLUMN _ NAME , Ġname )) ?. get ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( playlist Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Does Ġnot Ġexist .")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( playlist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcached Play Lists (): ĠMutable List < Play List >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( play List : ĠPlay List ): ĠObservable < Play List > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay List . createdAt Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay List . updatedAt Ġ= Ġnow ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. save ( play List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( play List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Create Ġplay Ġlist Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( play List : ĠPlay List ): ĠObservable < Play List > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay List . updatedAt Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. update ( play List )?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( play List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Update Ġplay Ġlist Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( play List : ĠPlay List ): ĠObservable < Play List > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. delete ( play List )?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( play List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Delete Ġplay Ġlist Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFolder ĊĠĠĠ Ġoverride Ġfun Ġfolders (): ĠObservable < Mutable List < Folder >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Manager . is First Query Folders ( mContext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Folders Ġ= ĠDB Utils . generate Default Folders () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. save ( default Folders )?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Create Ġdefault Ġfolders Ġeff ected Ġ" Ġ+ Ġresult Ġ+ Ġ" rows ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . report First Query Folders ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolders Ġ= Ġm Lite Orm ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builder . create < Folder >( Folder :: class . java ). append Order Asc By ( Folder . COLUMN _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( folders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( folder : ĠFolder ): ĠObservable < Folder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder . createdAt Ġ= ĠDate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. save ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Create Ġfolder Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( folders : ĠList < Folder >): ĠObservable < Mutable List < Folder >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( folder Ġin Ġfolders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfolder . createdAt Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. save ( folders )?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall New Folders Ġ= Ġm Lite Orm ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builder . create < Folder >( Folder :: class . java ). append Order Asc By ( Folder . COLUMN _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( all New Folders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Create Ġfolders Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( folder : ĠFolder ): ĠObservable < Folder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. delete ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. save ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Update Ġfolder Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( folder : ĠFolder ): ĠObservable < Folder > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. delete ( folder )?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Delete Ġfolder Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( songs : ĠMutable List < Song >): ĠObservable < Mutable List < Song >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( song Ġin Ġsongs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. insert ( song , ĠConflict Algorithm . Abort ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall S ongs Ġ= Ġm Lite Orm ?. query < Song >( Song :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfile : ĠFile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġall S ongs ?. iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator ?. hasNext () !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsong Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= ĠFile ( song . path !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexists Ġ= Ġfile . exists () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. delete ( song ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( all S ongs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( song : ĠSong ): ĠObservable < Song > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. update ( song ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( song ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onError ( Exception (" Update Ġsong Ġfailed ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Song As Favorite ( song : ĠSong , Ġis Favorite : ĠBoolean ): ĠObservable < Song > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay Lists Ġ= Ġm Lite Orm ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builder . create < Play List >( Play List :: class . java ). where Equals ( Play List . COLUMN _ FA V OR ITE , Ġtrue . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( play Lists ?. isEmpty () !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Favorite Ġ= ĠDB Utils . generate Favorite Play List ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Lists . add ( default Favorite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfavorite Ġ= Ġplay Lists . get ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsong . is Favorite Ġ= Ġis Favorite ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite . updatedAt Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInsert Ġsong Ġto Ġthe Ġbeginning Ġof Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite . add Song ( song , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite . remove Song ( song ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. insert ( song , ĠConflict Algorithm . Replace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. insert ( favorite , ĠConflict Algorithm . Replace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( song ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Init All S ongs ( playlist : ĠPlay List ): ĠObservable < Play List >{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġsubscriber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay Lists Ġ= Ġm Lite Orm ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Builder . create < Play List >( Play List :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Equals ( Play List . COLUMN _ NAME , ĠmContext ?. getString ( R . string . mp _ play _ list _ songs )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. get ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( play Lists Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// create Ġall Ġsongs Ġplaylist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall S ongs Ġ= ĠDB Utils . generate S ongs Play List ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Lite Orm ?. save ( all S ongs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Lists . name Ġ= ĠmContext ?. getString ( R . string . mp _ play _ list _ songs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Lists . updatedAt Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Lists . set S ongs ( playlist . songs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Lite Orm ?. update ( play Lists )?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . onNext ( play Lists ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriber . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" App Local DataSource " ĊĠĠĠ Ġ} Ċ } Ċ