package Ġcom . ton y ode v . fetch 2 . database Ċ Ċ import Ġandroid . arch . persistence . db . Support SQLite Database Ċ import Ġandroid . arch . persistence . room . Room Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Exception Ċ import Ġcom . ton y ode v . fetch 2 . Priority Sort Ċ import Ġcom . ton y ode v . fetch 2 . Status Ċ import Ġcom . ton y ode v . fetch 2 . database . migration . Migration Ċ import Ġcom . ton y ode v . fetch 2 . exception . Fetch Exception Ċ import Ġcom . ton y ode v . fetch 2 . fetch . Live Settings Ċ import Ġcom . ton y ode v . fetch 2 . util . default NoError Ċ import Ġcom . ton y ode v . fetch 2 core . Default Storage Resolver Ċ import Ġcom . ton y ode v . fetch 2 core . Extras Ċ import Ġcom . ton y ode v . fetch 2 core . Logger ĊĊ Ċ class ĠFetch Database ManagerImpl Ġconstructor ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġnamespace : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġlogger : ĠLogger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigrations : ĠArray < Migration >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlive Settings : ĠLive Settings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfile Exist Checks Enabled : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Storage Resolver : ĠDefault Storage Resolver ) Ġ: ĠFetch Database Manager Ġ{ ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġis Closed : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclosed ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġvar Ġdelegate : ĠFetch Database Manager . Delegate ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġrequest Database : ĠDownload Database ĊĠĠĠ Ġprivate Ġval Ġdatabase : ĠSupport SQLite Database ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠRoom . database Builder ( context , ĠDownload Database :: class . java , Ġ"$ namespace . db ") ĊĠĠĠĠĠĠĠ Ġbuilder . add Migrations (* migrations ) ĊĠĠĠĠĠĠĠ Ġrequest Database Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġdatabase Ġ= Ġrequest Database . open Helper . writable Database ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( download Info : ĠDownload Info ): ĠPair < Download Info , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġrequest Database . request Dao (). insert ( download Info ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( download Info , Ġrequest Database . was Row Inserted ( row )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( download InfoList : ĠList < Download Info >): ĠList < Pair < Download Info , ĠBoolean >> Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġrows List Ġ= Ġrequest Database . request Dao (). insert ( download InfoList ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrows List . indices . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( download InfoList [ it ], Ġrequest Database . was Row Inserted ( rows List [ it ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( download Info : ĠDownload Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġrequest Database . request Dao (). delete ( download Info ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( download InfoList : ĠList < Download Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġrequest Database . request Dao (). delete ( download InfoList ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete All () Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġrequest Database . request Dao (). delete All () ĊĠĠĠĠĠĠĠ Ġlogger . d (" Cle ared ĠDatabase Ġ$ namespace ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( download Info : ĠDownload Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġrequest Database . request Dao (). update ( download Info ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( download InfoList : ĠList < Download Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġrequest Database . request Dao (). update ( download InfoList ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate File Bytes Info And Status Only ( download Info : ĠDownload Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" UPDATE Ġ${ Download Database . TABLE _ NAME } ĠSET Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"${ Download Database . COLUMN _ DOWN LOADED } Ġ= Ġ${ download Info . downloaded }, Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"${ Download Database . COLUMN _ TOTAL } Ġ= Ġ${ download Info . total }, Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"${ Download Database . COLUMN _ STATUS } Ġ= Ġ${ download Info . status . value } Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" WHERE Ġ${ Download Database . COLUMN _ ID } Ġ= Ġ${ download Info . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . set Transaction Successful () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSQLite Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e (" Database Manager Ġexception ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . end Transaction () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSQLite Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e (" Database Manager Ġexception ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Extras ( id : ĠInt , Ġextras : ĠEx tras ): ĠDownload Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġdatabase . beginTransaction () ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" UPDATE Ġ${ Download Database . TABLE _ NAME } ĠSET Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"${ Download Database . COLUMN _ EX TR AS } Ġ= Ġ'${ extras . toJSON String () }' Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" WHERE Ġ${ Download Database . COLUMN _ ID } Ġ= Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġdatabase . set Transaction Successful () ĊĠĠĠĠĠĠĠ Ġdatabase . end Transaction () ĊĠĠĠĠĠĠĠ Ġval Ġdownload Ġ= Ġrequest Database . request Dao (). get ( id ) ĊĠĠĠĠĠĠĠ Ġsanitize ( download ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget (): ĠList < Download Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġdownloads Ġ= Ġrequest Database . request Dao (). get () ĊĠĠĠĠĠĠĠ Ġsanitize ( downloads ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( id : ĠInt ): ĠDownload Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġdownload Ġ= Ġrequest Database . request Dao (). get ( id ) ĊĠĠĠĠĠĠĠ Ġsanitize ( download ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( ids : ĠList < Int >): ĠList < Download Info ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġdownloads Ġ= Ġrequest Database . request Dao (). get ( ids ) ĊĠĠĠĠĠĠĠ Ġsanitize ( downloads ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetBy File ( file : ĠString ): ĠDownload Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġdownload Ġ= Ġrequest Database . request Dao (). getBy File ( file ) ĊĠĠĠĠĠĠĠ Ġsanitize ( download ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetBy Status ( status : ĠStatus ): ĠList < Download Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġvar Ġdownloads Ġ= Ġrequest Database . request Dao (). getBy Status ( status ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sanitize ( downloads )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownloads Ġ= Ġdownloads . filter Ġ{ Ġit . status Ġ== Ġstatus Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetBy Status ( statuses : ĠList < Status >): ĠList < Download Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġvar Ġdownloads Ġ= Ġrequest Database . request Dao (). getBy Status ( statuses ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sanitize ( downloads )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownloads Ġ= Ġdownloads . filter Ġ{ Ġstatuses . contains ( it . status ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetBy Group ( group : ĠInt ): ĠList < Download Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġdownloads Ġ= Ġrequest Database . request Dao (). getBy Group ( group ) ĊĠĠĠĠĠĠĠ Ġsanitize ( downloads ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Downloads In Group With Status ( groupId : ĠInt , Ġstatuses : ĠList < Status >): ĠList < Download Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdownloads Ġ= Ġrequest Database . request Dao (). getBy Group With Status ( groupId , Ġstatuses ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sanitize ( downloads )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownloads Ġ= Ġdownloads . filter Ġ{ Ġdownload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatuses . any Ġ{ Ġit Ġ== Ġdownload . status Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Download sBy Request Identifier ( identifier : ĠLong ): ĠList < Download Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġval Ġdownloads Ġ= Ġrequest Database . request Dao (). get Download sBy Request Identifier ( identifier ) ĊĠĠĠĠĠĠĠ Ġsanitize ( downloads ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Pending Downloads Sorted ( priority Sort : ĠPriority Sort ): ĠList < Download Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġvar Ġdownloads Ġ= Ġif Ġ( priority Sort Ġ== ĠPriority Sort . ASC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Database . request Dao (). get Pending Downloads Sorted ( Status . QUE U ED ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Database . request Dao (). get Pending Downloads Sorted Desc ( Status . QUE U ED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( sanitize ( downloads )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownloads Ġ= Ġdownloads . filter Ġ{ Ġit . status Ġ== ĠStatus . QUE U ED Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdownloads ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpending Count Query Ġ= Ġ" SELECT Ġ${ Download Database . COLUMN _ ID } ĠFROM Ġ${ Download Database . TABLE _ NAME }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠWHERE Ġ${ Download Database . COLUMN _ STATUS } Ġ= Ġ'${ Status . QUE U ED . value } '" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠOR Ġ${ Download Database . COLUMN _ STATUS } Ġ= Ġ'${ Status . DOWNLOAD ING . value } '" ĊĊĠĠĠ Ġprivate Ġval Ġpending Count Include Added Query Ġ= Ġ" SELECT Ġ${ Download Database . COLUMN _ ID } ĠFROM Ġ${ Download Database . TABLE _ NAME }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠWHERE Ġ${ Download Database . COLUMN _ STATUS } Ġ= Ġ'${ Status . QUE U ED . value } '" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠOR Ġ${ Download Database . COLUMN _ STATUS } Ġ= Ġ'${ Status . DOWNLOAD ING . value } '" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠOR Ġ${ Download Database . COLUMN _ STATUS } Ġ= Ġ'${ Status . AD DED . value } '" ĊĊĠĠĠ Ġoverride Ġfun Ġget Pending Count ( include Added Downloads : ĠBoolean ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġif Ġ( include Added Downloads ) Ġpending Count Include Added Query Ġelse Ġpending Count Query ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor : ĠCursor ? Ġ= Ġdatabase . query ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcursor ?. count ?. to Long () Ġ?: Ġ- 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsanitize On First Entry () Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception If Closed () ĊĠĠĠĠĠĠĠ Ġlive Settings . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . did Sanit ize Database On First Entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsanitize ( get (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . did Sanit ize Database On First Entry Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġupdated Downloads List Ġ= Ġmutable ListOf < Download Info >() ĊĊĠĠĠ Ġprivate Ġfun Ġsanitize ( downloads : ĠList < Download Info >, Ġfirst Entry : ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġupdated Downloads List . clear () ĊĠĠĠĠĠĠĠ Ġvar Ġdownload Info : ĠDownload Info ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdownloads . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info Ġ= Ġdownloads [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( download Info . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . COMPLETED Ġ-> Ġon Completed ( download Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . DOWNLOAD ING Ġ-> Ġon Downloading ( download Info , Ġfirst Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . QUE U ED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . PA USED Ġ-> Ġon Paused ( download Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . CANCEL LED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . AD DED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . NONE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . DELETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . RE MOVED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġupdated Count Ġ= Ġupdated Downloads List . size ĊĠĠĠĠĠĠĠ Ġif Ġ( updated Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( updated Downloads List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e (" Failed Ġto Ġupdate ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdated Downloads List . clear () ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Count Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Paused ( download Info : ĠDownload Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( download Info . downloaded Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Exist Checks Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! default Storage Resolver . file Exists ( download Info . file )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info . downloaded Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info . total Ġ= Ġ- 1 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info . error Ġ= Ġdefault NoError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Downloads List . add ( download Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate ?. delete Temp Files For Download ( download Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Downloading ( download Info : ĠDownload Info , Ġfirst Entry : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( first Entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġif Ġ( download Info . downloaded Ġ> Ġ 0 Ġ&& Ġdownload Info . total Ġ> Ġ 0 Ġ&& Ġdownload Info . downloaded Ġ>= Ġdownload Info . total ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . COMPLETED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . QUE U ED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info . status Ġ= Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info . error Ġ= Ġdefault NoError ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Downloads List . add ( download Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Completed ( download Info : ĠDownload Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( download Info . total Ġ< Ġ 1 Ġ&& Ġdownload Info . downloaded Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info . total Ġ= Ġdownload Info . downloaded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Info . error Ġ= Ġdefault NoError ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Downloads List . add ( download Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsanitize ( download Info : ĠDownload Info ?, Ġinitializing : ĠBoolean Ġ= Ġfalse ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( download Info Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsanitize ( listOf ( download Info ), Ġinitializing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclosed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrequest Database . close () ĊĠĠĠĠĠĠĠ Ġlogger . d (" Database Ġclosed ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġthrow Exception If Closed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFetch Exception ("$ namespace Ġdatabase Ġis Ġclosed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }