package Ġcom . al vin h kh . bu set a . data gov hk Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work . Data Ċ import Ġandroidx . work . Worker Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġcom . al vin h kh . bu set a . C Ċ import Ġcom . al vin h kh . bu set a . data gov hk . model . M tr Bus F are Ċ import Ġcom . al vin h kh . bu set a . data gov hk . model . M tr Bus Route Ċ import Ġcom . al vin h kh . bu set a . data gov hk . model . M tr Bus Stop Ċ import Ġcom . al vin h kh . bu set a . m tr . M tr Service Ċ import Ġcom . al vin h kh . bu set a . route . model . Route Ċ import Ġcom . al vin h kh . bu set a . route . dao . Route Database Ċ import Ġcom . al vin h kh . bu set a . route . model . Route Stop Ċ import Ġorg . js oup . parser . Parser Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠL rt Feed er Worker ( context Ġ: ĠContext , Ġparams Ġ: ĠWorker Parameters ) ĊĠĠĠ Ġ: ĠWorker ( context , Ġparams ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġopen DataService Ġ= ĠM tr Service . open Data . create ( M tr Service :: class . java ) ĊĊĠĠĠ Ġprivate Ġval Ġroute Database Ġ= ĠRoute Database . getInstance ( context ) ĊĊĠĠĠ Ġoverride Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanual Update Ġ= Ġinput Data . getBoolean ( C . EXTRA . MAN UAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġcompany Code Ġ= Ġinput Data . getString ( C . EXTRA . COMP ANY _ CODE ) ?: C . PROVIDER . L RT FEED ER ĊĠĠĠĠĠĠĠ Ġval Ġoutput Data Ġ= ĠData . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Boolean ( C . EXTRA . MAN UAL , Ġmanual Update ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( C . EXTRA . COMP ANY _ CODE , Ġcompany Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġroute List Ġ= Ġarray ListOf < Route >() ĊĠĠĠĠĠĠĠ Ġval Ġstop List Ġ= Ġarray ListOf < Route Stop >() ĊĠĠĠĠĠĠĠ Ġval Ġtime Now Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġm tr Bus Route Map Ġ= ĠHashMap < String , ĠRoute >() ĊĠĠĠĠĠĠĠ Ġval Ġm tr Bus F are Map Ġ= ĠHashMap < String , ĠM tr Bus F are >() ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġopen DataService . bus Routes (). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm tr Bus Route List Ġ= ĠM tr Bus Route . from CSV ( res ?. string ()? :" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( m tr Bus Route Ġin Ġm tr Bus Route List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m tr Bus Route . route Id . isNull OrEmpty ()) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= ĠRoute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . company Code Ġ= ĠC . PROVIDER . L RT FEED ER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . code Ġ= Ġm tr Bus Route . route Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . name Ġ= Ġm tr Bus Route . route Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m tr Bus Route . route Name Chi . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm tr Bus Route . route Name Chi Ġ= ĠParser . un escape Entities ( m tr Bus Route . route Name Chi !! , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Name Ġ= Ġm tr Bus Route . route Name Chi !!. split (" èĩ³ ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Name . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . destination Ġ= Ġroute Name [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . origin Ġ= Ġroute Name [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . origin Ġ= Ġm tr Bus Route . route Name Chi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . sequence Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . last Update Ġ= Ġtime Now ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute List . add ( route ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm tr Bus Route Map [ m tr Bus Route . route Id !! ] Ġ= Ġroute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . failure ( output Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinsert edList Ġ= Ġroute Database ?. route Dao ()?. insert ( route List ) ĊĠĠĠĠĠĠĠ Ġif Ġ( insert edList ?. size ?: 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Database ?. route Dao ()?. delete ( company Code , Ġtime Now ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġopen DataService . bus F ares (). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm tr Bus F are List Ġ= ĠM tr Bus F are . from CSV ( res ?. string ()? :" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( m tr Bus F are Ġin Ġm tr Bus F are List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m tr Bus F are . route Id . isNull OrEmpty ()) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm tr Bus F are Map [ m tr Bus F are . route Id !! ] Ġ= Ġm tr Bus F are ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . failure ( output Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġopen DataService . bus Stops (). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm tr Bus Stop List Ġ= ĠM tr Bus Stop . from CSV ( res ?. string ()? :" ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstops Ġ= Ġarray ListOf < Route Stop >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( m tr Bus Stop Ġin Ġm tr Bus Stop List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m tr Bus Stop . route Id . isNull OrEmpty ()) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm tr Bus F are Ġ= Ġm tr Bus F are Map [ m tr Bus Stop . route Id !! ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġm tr Bus Route Map [ m tr Bus Stop . route Id !! ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Stop Ġ= ĠRoute Stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . stop Id Ġ= Ġm tr Bus Stop . station Sequence No . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . company Code Ġ= Ġroute ?. company Code ?: C . PROVIDER . L RT FEED ER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . route Destination Ġ= Ġroute ?. destination ?: "" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . route Sequence Ġ= Ġroute ?. sequence ? :" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m tr Bus F are Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . f are Full Ġ= Ġm tr Bus F are . f are Single Ad ult . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . f are Child Ġ= Ġm tr Bus F are . f are Single Child . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . f are Sen ior Ġ= Ġm tr Bus F are . f are Single El der ly . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m tr Bus Stop . station Name Chi . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . name Ġ= ĠParser . un escape Entities ( m tr Bus Stop . station Name Chi !! , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . route Origin Ġ= Ġroute ?. origin ?: "" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . route No Ġ= Ġroute ?. name ?: m tr Bus Stop . route Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . route Id Ġ= Ġroute ?. code ?: m tr Bus Stop . route Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . route ServiceType Ġ= Ġroute ?. service Type ?: "" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . sequence Ġ= Ġm tr Bus Stop . station Sequence No . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . eta Get Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . imageUrl Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop . last Update Ġ= Ġtime Now ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstops . add ( route Stop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġstop ) Ġin Ġstops . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop . sequence Ġ= Ġi . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop List . add ( stop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinserted Stop List Ġ= Ġroute Database ?. route Stop Dao ()?. insert ( stop List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inserted Stop List ?. size ?: 0 Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Database ?. route Stop Dao ()?. delete ( company Code , Ġtime Now ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . failure ( output Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success ( output Data ) ĊĠĠĠ Ġ} Ċ }