package Ġcom . ing by r . v dm . utils Ċ Ċ import Ġcom . ing by r . v dm . dao .* Ċ import Ġcom . ing by r . v dm . models . Download Task Model Ċ import Ġcom . ing by r . v dm . models . Task Config Ċ import Ġjavafx . collections . Observable List Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . Schema Utils Ċ import Ġorg . jetbrains . ex posed . sql . Std Out Sql Logger Ċ import Ġorg . jetbrains . ex posed . sql . add Logger Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ object ĠDB Utils Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( DB Utils :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . connect ( App Properties . DATABASE _ URL , Ġdriver Ġ= Ġ" org . h 2 . Driver ", Ġuser Ġ= Ġ" v dm ", Ġpassword Ġ= Ġ" v dm ") ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Logger ( Std Out Sql Logger ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Utils . create ( Task Config Table , ĠDownload Task Table ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsave Download Task ( new Download Task Model : ĠDownload Task Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Task Config Ġ= Ġnew Download Task Model . task Config ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Download Task Ġ= ĠDownload Task DAO . find Ġ{ ĠDownload Task Table . createdAt Ġeq Ġnew Download Task Model . createdAt Ġ}. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Download Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġtask Ġconfig ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Task Config In DB ( old Download Task . task Config , Ġnew Task Config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġdownload Ġtask Ġmodel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Download Task Model In DB ( old Download Task , Ġnew Download Task Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġnew Ġone Ġand Ġsave Ġto Ġdb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Config DB Ġ= Ġcreate Task Config In DB ( new Task Config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Download Task Model In DB ( new Download Task Model , Ġtask Config DB ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmust Ġbe Ġwrapped Ġin Ġtransaction Ġblock ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Task Config In DB ( old Task Config : ĠTask Config DAO , Ġnew Task Config : ĠTask Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" update Ġdownload Ġtask Ġconfig Ġdata Ġin Ġdb ") ĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġtask Ġconfig ĊĠĠĠĠĠĠĠ Ġold Task Config . url Ġ= Ġnew Task Config . url ĊĠĠĠĠĠĠĠ Ġold Task Config . download Type Ġ= Ġnew Task Config . download Type . name ĊĠĠĠĠĠĠĠ Ġold Task Config . engine Type Ġ= Ġnew Task Config . engine Type . name ĊĠĠĠĠĠĠĠ Ġold Task Config . download Default Format Ġ= Ġnew Task Config . download Default Format ĊĠĠĠĠĠĠĠ Ġold Task Config . storage Path Ġ= Ġnew Task Config . storage Path ĊĠĠĠĠĠĠĠ Ġold Task Config . cookie Ġ= Ġnew Task Config . cookie ĊĠĠĠĠĠĠĠ Ġold Task Config . ffmpeg Ġ= Ġnew Task Config . ffmpeg ĊĠĠĠĠĠĠĠ Ġold Task Config . proxy Type Ġ= Ġnew Task Config . proxy Type . name ĊĠĠĠĠĠĠĠ Ġold Task Config . proxy Address Ġ= Ġnew Task Config . proxy Address ĊĠĠĠĠĠĠĠ Ġold Task Config . proxy Port Ġ= Ġnew Task Config . proxy Port ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmust Ġbe Ġwrapped Ġin Ġtransaction Ġblock ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Download Task Model In DB ( old Download Task Model : ĠDownload Task DAO , Ġnew Download Task Model : ĠDownload Task Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" update Ġdownload Ġtask Ġdata Ġin Ġdb ") ĊĠĠĠĠĠĠĠ Ġold Download Task Model . checked Ġ= Ġnew Download Task Model . checked ĊĠĠĠĠĠĠĠ Ġold Download Task Model . title Ġ= Ġnew Download Task Model . title ĊĠĠĠĠĠĠĠ Ġold Download Task Model . size Ġ= Ġnew Download Task Model . size ĊĠĠĠĠĠĠĠ Ġold Download Task Model . status Ġ= Ġnew Download Task Model . status . name ĊĠĠĠĠĠĠĠ Ġold Download Task Model . progress Ġ= Ġnew Download Task Model . progress . toFloat () ĊĠĠĠĠĠĠĠ Ġold Download Task Model . createdAt Ġ= Ġnew Download Task Model . createdAt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġmust Ġbe Ġwrapped Ġin Ġtransaction Ġblock ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Task Config In DB ( task Config : ĠTask Config ) Ġ= ĠTask Config DAO . new Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" create Ġtask Ġconfig Ġand Ġsave Ġto Ġdb ") ĊĠĠĠĠĠĠĠ Ġurl Ġ= Ġtask Config . url ĊĠĠĠĠĠĠĠ Ġdownload Type Ġ= Ġtask Config . download Type . name ĊĠĠĠĠĠĠĠ Ġengine Type Ġ= Ġtask Config . engine Type . name ĊĠĠĠĠĠĠĠ Ġdownload Default Format Ġ= Ġtask Config . download Default Format ĊĠĠĠĠĠĠĠ Ġstorage Path Ġ= Ġtask Config . storage Path ĊĠĠĠĠĠĠĠ Ġcookie Ġ= Ġtask Config . cookie ĊĠĠĠĠĠĠĠ Ġffmpeg Ġ= Ġtask Config . ffmpeg ĊĠĠĠĠĠĠĠ Ġformat Id Ġ= Ġtask Config . format Id ĊĠĠĠĠĠĠĠ Ġproxy Type Ġ= Ġtask Config . proxy Type . name ĊĠĠĠĠĠĠĠ Ġproxy Address Ġ= Ġtask Config . proxy Port ĊĠĠĠĠĠĠĠ Ġproxy Port Ġ= Ġtask Config . proxy Port ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Download Task Model In DB ( download Task : ĠDownload Task Model , Ġtask Config DAO : ĠTask Config DAO ) Ġ= ĠDownload Task DAO . new Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" create Ġdownload Ġtask Ġmodel Ġand Ġsave Ġto Ġdb ") ĊĠĠĠĠĠĠĠ Ġtask Config Ġ= Ġtask Config DAO ĊĠĠĠĠĠĠĠ Ġchecked Ġ= Ġdownload Task . checked ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġdownload Task . title ĊĠĠĠĠĠĠĠ Ġsize Ġ= Ġdownload Task . size ĊĠĠĠĠĠĠĠ Ġstatus Ġ= Ġdownload Task . status . name ĊĠĠĠĠĠĠĠ Ġprogress Ġ= Ġdownload Task . progress . toFloat () ĊĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġdownload Task . createdAt ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdelete Download Task ( download Task : ĠDownload Task Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" delete Ġdownload Ġmodels Ġfrom Ġdb ") ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownload Task DB Ġ= ĠDownload Task DAO . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Task Table . createdAt Ġeq Ġdownload Task . createdAt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Task DB ?. delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload All Download Tasks ( download Task Model List : ĠObservable List < Download Task Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" load Ġall Ġdownload Ġtasks ") ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Task DAO . all (). sorted By Ġ{ Ġit . createdAt Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Task Model List . add ( it . to Model ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }