package Ġde . rom ank re ise l . ig cs ync . data Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . net . Uri Ċ import Ġde . rom ank re ise l . ig cs ync . MainActivity Ċ import Ġde . rom ank re ise l . ig cs ync . R Ċ import Ġde . rom ank re ise l . ig cs ync . data . dao . Already Imported Url Dao Ċ import Ġde . rom ank re ise l . ig cs ync . data . dao . Flight Dao Ċ import Ġde . rom ank re ise l . ig cs ync . data . model . Already Imported Url Ċ import Ġde . rom ank re ise l . ig cs ync . data . model . Flight Ċ import Ġde . rom ank re ise l . ig cs ync . ig c . I gc Data Ċ import Ġjava . math . BigInteger Ċ import Ġjava . security . Message Digest Ċ import Ġjava . time . Duration Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashSet Ċ Ċ class ĠFlight Import Helper ( private Ġval Ġapplication Context : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġpreferences : ĠSharedPreferences ĊĠĠĠ Ġprivate Ġval Ġflight Dao : ĠFlight Dao ĊĠĠĠ Ġprivate Ġval Ġalready Imported Url Dao : ĠAlready Imported Url Dao ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠI gc Sync Database . get Database ( this . application Context ) ĊĠĠĠĠĠĠĠ Ġthis . flight Dao Ġ= Ġdatabase . flight Dao () ĊĠĠĠĠĠĠĠ Ġthis . already Imported Url Dao Ġ= Ġdatabase . already Imported Url Dao () ĊĠĠĠĠĠĠĠ Ġthis . preferences Ġ= Ġthis . application Context . get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity :: class . simple Name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext . MODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġinsert All ( var arg Ġfl ights : ĠFlight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . flight Dao . insert All (* fl ights ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġinsert All ( var arg Ġalready Imported Url : ĠAlready Imported Url ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . already Imported Url Dao . insert All (* already Imported Url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġflight Url Already Known ( uri : ĠUri ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . already Imported Url Dao . findBy Url ( uri . toString ()). isNotEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġalready Known ( ĊĠĠĠĠĠĠĠ Ġflight : ĠFlight , ĊĠĠĠĠĠĠĠ Ġpreviously Seen Checksum s : ĠHashSet < String > Ġ= ĠHashSet () ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! flight Dao . findBy Sha 2 5 6 Checksum ( flight . sha 2 5 6 Checksum ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEmpty () Ġ|| Ġpreviously Seen Checksum s . contains ( flight . sha 2 5 6 Checksum ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġflight Above Minimum Duration ( flight : ĠFlight ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġminimum Seconds Ġ= Ġthis . preferences . getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . application Context . getString ( R . string . preference _ minimum _ flight _ duration _ seconds ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 6 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġflight . duration Ġ>= ĠDuration . of Seconds ( minimum Seconds . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Flight ( ĊĠĠĠĠĠĠĠ Ġfilename : ĠString , ĊĠĠĠĠĠĠĠ Ġig c Content : ĠString , ĊĠĠĠĠĠĠĠ Ġimport Timestamp : ĠDate Ġ= ĠDate ( System . currentTimeMillis ()) ĊĠĠĠ Ġ): ĠFlight Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Now Ġlet 's Ġcompare Ġthe Ġcontent Ġ( sha 2 5 6 - checksum ) Ġto Ġfiles Ġwe 've Ġseen Ġbefore ĊĠĠĠĠĠĠĠ Ġval Ġchecksum Ġ= ĠBigInteger ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĠMessage Digest . getInstance (" SHA - 2 5 6 "). digest ( ig c Content . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ). toString ( 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġig c Data Ġ= ĠI gc Data ( ig c Content ) ĊĠĠĠĠĠĠĠ Ġval Ġflight Ġ= ĠFlight ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchecksum , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilename , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Timestamp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġig c Content , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġig c Data . startTime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġig c Data . duration ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġflight ĊĠĠĠ Ġ} Ċ }