/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠN ECT EC Ċ Ġ* ĠĠ ĠNational ĠElectron ics Ġand ĠComputer ĠTechnology ĠCenter , ĠTh ail and Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġf fc . air sync Ċ Ċ import Ġf fc . air sync . db . Database Dao Ċ import Ġf fc . air sync . gui . Try Icon Ċ import Ġf fc . air sync . provider . create Ar is ync Gui Ċ import Ġf fc . air sync . provider . database Dao Module Ċ import Ġf fc . air sync . ui . Air Sync GUI Ċ import Ġf fc . air sync . ui . create Progress Ċ import Ġf fc . air sync . utils . Api Loop Exception Ċ import Ġf fc . air sync . utils . Empty GUI Ċ import Ġf fc . air sync . utils . create ErrorMessage Ċ import Ġf fc . air sync . utils . getLogger Ċ import Ġf fc . air sync . utils . getPath Jar Dir Ċ import Ġmax . kotlin . check dup p . Check Dup p lic ate Ċ import Ġmax . kotlin . check dup p . Check Dup p lic ate With Rest Ċ import Ġorg . ko hs uke . args 4 j . Cmd Line Exception Ċ import Ġorg . ko hs uke . args 4 j . Cmd Line Parser Ċ import Ġorg . ko hs uke . args 4 j . Option Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjava . awt . event . Mouse Listener Ċ import Ġjava . io . File Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . Zone Offset Ċ import Ġjava . util . TimeZone Ċ import Ġjavax . ws . rs . Not Authorized Exception Ċ import Ġkotlin . system . exit Process Ċ Ċ private Ġval Ġlogger Ġ= Ġget Logger ( Main :: class . java ) Ċ private Ġvar Ġshutdown Ġ= Ġfalse Ċ var Ġcount Sync Ġ= Ġ- 1 0 0 Ċ Ċ var Ġis Shutdown ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! shutdown ) Ġshutdown Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġget () Ġ= Ġshutdown Ċ Ċ internal Ġclass ĠMain Ġconstructor ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġ@ Option ( name Ġ= Ġ"- api ", Ġusage Ġ= Ġ" Api Ġurl ĠEx . Ġhttps :// ffc - nect ec . herokuapp . com Ġ") ĊĠĠĠ Ġprivate Ġvar Ġapi Ġ= ĠAPI ĊĊĠĠĠ Ġvar Ġskip Config My Ini Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġno GUI Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġprocess Dup p lic ate : ĠCheck Dup p lic ate Ġ= ĠCheck Dup p lic ate With Rest (" air sync ") ĊĊĠĠĠ Ġval Ġtry Icon : ĠTry Icon ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinstant Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġif Ġ( args . contains ("- v ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( Build Config . VERSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( args . contains ("- get path ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( getPath Jar Dir ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info (" Run Ġwith Ġ${ Build Config . VERSION }") ĊĠĠĠĠĠĠĠ Ġgui . setHeader ( Build Config . VERSION ) ĊĠĠĠĠĠĠĠ Ġlogger . trace (" Show Ġgui ") ĊĠĠĠĠĠĠĠ Ġgui . show W Ind ows () ĊĠĠĠĠĠĠĠ Ġlogger . trace (" Create Ġsmall Ġicon ") ĊĠĠĠĠĠĠĠ Ġtry Icon Ġ= ĠCreate Try Icon () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . contains ("- n og ui ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" No Ġgui Ġmode ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno GUI Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . contains ("- skip con ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Skip Ġcheck Ġmy . ini ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip Config My Ini Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Check Ġprocess Ġduplicate .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Dup p lic ate . register () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : Ġmax . kotlin . check dup p . Dup p lic ate Process Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ErrorMessage (" Duplicate ", Ġ" Duplicate Ġprocess ", Ġex , Ġlogger ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTime Zone . setDefault ( TimeZone . getTime Zone ( Zone Id . of Offset (" UTC ", ĠZone Offset . of Hours ( 7 )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠCmd Line Parser ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdd Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdd . addAll ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdd . remove ("- run now ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . parse Argument ( dd . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cmd : ĠCmd Line Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( cmd , Ġcmd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ErrorMessage (" Init ĠError ", Ġ" Init ĠError ", Ġex , Ġlogger ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCreate Try Icon (): ĠTry Icon Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTry Icon (" FF C ĠAir sync ", Ġ" icon . png ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠMouse Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Released ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Entered ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . button Ġ== ĠMouseEvent . BUTTON 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgui . create Right Click ( e . point . x , Ġe . point . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgui . switch h Hide Show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgui . setLocation ( e . point . x , Ġe . point . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Exit ed ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdao : ĠDatabase Dao Ġby Ġlazy Ġ{ Ġdatabase Dao Module () Ġ} ĊĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġgui . set Look P cu Code Ġ{ Ġdao . get Detail ()[" pc u code "] !! Ġ} ĊĠĠĠĠĠĠĠ Ġgui . set Call Confirm Un install Ġ{ ĠUn install (). confirm Remove Organization () Ġ} ĊĠĠĠĠĠĠĠ Ġgui . create Progress (" Init ĠDao ", Ġ 5 0 , Ġ 1 0 0 , Ġ" à¸ģ à¸³ à¸¥ à¸± à¸ĩ à¸ķ à¸£ à¸§ à¸Ī à¸ª à¸Ń à¸ļ à¸ģà¸²à¸£ à¸ķ à¸± à¹ī à¸ĩ à¸Ħ à¹Ī à¸² ĠM ysql ĠJ HC IS ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! skip Config My Ini ) Ġdao . init () ĊĠĠĠĠĠĠĠ Ġgui . create Progress (" Init ĠDao ", Ġ 1 0 0 , Ġ 1 0 0 , Ġ" à¸ģ à¸³ à¸¥ à¸± à¸ĩ à¸ķ à¸£ à¸§ à¸Ī à¸ª à¸Ń à¸ļ à¸ģà¸²à¸£ à¸ķ à¸± à¹ī à¸ĩ à¸Ħ à¹Ī à¸² ĠM ysql ĠJ HC IS ") ĊĠĠĠĠĠĠĠ Ġgui . remove (" Init ĠDao ") ĊĠĠĠĠĠĠĠ ĠConfig . baseUrl Rest Ġ= Ġapi ĊĠĠĠĠĠĠĠ ĠConfig . log filepath Ġ= Ġdb Log filePath (). absolute Path ĊĠĠĠĠĠĠĠ ĠMain Controller ( dao ). run () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdb Log filePath (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb Location Ġ= Ġdao . get Database Loc a ion () ĊĠĠĠĠĠĠĠ Ġval Ġdata Dir Ġ= ĠFile ( db Location , Ġ" data ") ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( data Dir , Ġ" j log . log ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġinstant : ĠMain ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġ// ĠRuntime . get Runtime (). add Shutdown Hook ( Shutdown Hook ()) ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuninstall Ġ= ĠUn install () ĊĠĠĠĠĠĠĠ Ġif Ġ( uninstall . is Un install ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuninstall . remove File () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMain ( args ). run () ĊĠĠĠ Ġ} Ġcatch Ġ( ex : Ġorg . j db i . v 3 . core . Connection Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgui . remove (" Database ") ĊĠĠĠĠĠĠĠ Ġcreate ErrorMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Init ĠController ĠError ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" à¹Ħ à¸¡ à¹Ī à¸ª à¸²à¸¡ à¸²à¸£ à¸ĸ à¹Ģ à¸Ĭ à¸·à¹Ī à¸Ń à¸¡ à¸ķ à¹Ī à¸Ń ĠDatabase Ġ à¸ķ à¸£ à¸§ à¸Ī à¸ª à¸Ń à¸ļ à¸ģà¸²à¸£ à¸ķ à¸± à¹ī à¸ĩ à¸Ħ à¹Ī à¸² Ġ à¸Ľ à¸´ à¸Ķ à¹ģ à¸¥ à¹ī à¸§ à¹Ģ à¸Ľ à¸´ à¸Ķ ĠF FC ĠAir sync Ġ à¹ĥ à¸« à¸¡ à¹Ī à¸Ń à¸µ à¸ģ à¸Ħ à¸£ à¸± à¹ī à¸ĩ ", Ġex , Ġlogger ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠApi Loop Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ErrorMessage (" Api ĠError ", Ġ" à¹Ģ à¸ģ à¸´ à¸Ķ à¸Ĥ à¹ī à¸Ń à¸ ľ à¸´ à¸Ķ à¸ŀ à¸¥ à¸²à¸ Ķ ĠApi ", Ġex , Ġlogger ) ĊĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠ Ġ} Ġcatch Ġ( ex : Ġjava . net . Socket TimeoutException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ErrorMessage (" Network ĠError ", Ġ" à¹Ħ à¸¡ à¹Ī à¸ª à¸²à¸¡ à¸²à¸£ à¸ĸ à¹Ģ à¸Ĭ à¸·à¹Ī à¸Ń à¸¡ à¸ķ à¹Ī à¸Ń à¸ģ à¸± à¸ļ ĠCloud Ġ à¹Ħ à¸Ķ à¹ī ", Ġex , Ġlogger ) ĊĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠ Ġ} Ġcatch Ġ( ex : Ġjava . net . Socket Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ErrorMessage (" Socket ĠError ", Ġ" Network ĠSocket ĠError ", Ġex , Ġlogger ) ĊĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠNot Authorized Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ErrorMessage (" Auth ĠError ", Ġ" Server Ġ à¸Ľ à¸ ı à¸´ à¹Ģ à¸ª à¸Ĺ à¸ģà¸²à¸£ à¹Ģ à¸Ĭ à¸·à¹Ī à¸Ń à¸¡ à¸ķ à¹Ī à¸Ń ĠCannot Ġauth Ġ${ ex . message }", Ġex , Ġlogger ) ĊĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ErrorMessage (" Error ĠMessage ", Ġ" Init ĠError Ġ$ ex ", Ġex , Ġlogger ) ĊĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġgui : ĠAir Sync GUI Ġ= Ġtry Ġ{ ĊĠĠĠ Ġcreate Ar is ync Gui () Ċ } Ġcatch Ġ( ex : Ġjava . awt . Head less Exception ) Ġ{ ĊĠĠĠ ĠEmpty GUI () Ċ } Ċ