package Ġcom . gw ax . sc ry fall Ċ Ċ import Ġcom . gw ax . sc ry fall . models . Sc ry fall Card Ċ import Ġcom . gw ax . sc ry fall . models . Sc ry fall Set Ċ import Ġorg . map db . DB Ċ import Ġorg . map db . DB Maker Ċ import Ġorg . map db . HT ree Map Ċ import Ġorg . map db . Serializer Ċ import Ġorg . map db . serializer . Serializer Compression Wrapper Ċ import Ġjava . io . File Ċ import Ġjava . net . URL Ċ Ċ private Ġinline Ġfun Ġ< re ified ĠT > ĠDB . transact ( op : Ġ( DB ) Ġ-> ĠT ): ĠT Ġ= ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġop ( this ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . rollback () ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . commit () ĊĠĠĠ Ġ} ĊĊ Ċ class ĠS cry fall Cache ( cacheDir : ĠFile ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDB _ START _ SIZE Ġ= Ġ 2 0 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDB _ INCREMENT _ SIZE Ġ= Ġ 2 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠDB Collection Ġ{ ĊĠĠĠĠĠĠĠ ĠMET ADATA , ĊĠĠĠĠĠĠĠ ĠURL S , ĊĠĠĠĠĠĠĠ ĠCOL LECTION S ; ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Or Open ( db : ĠDB ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . hash Map ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. key Serializer ( Serializer . STRING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value Serializer ( Serializer Compression Wrapper ( Serializer . JAVA )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Or Open () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdb File Ġ= Ġcache Dir . resolve (" sc ry cache . db ") ĊĠĠĠ Ġprivate Ġval Ġdb Ġ= ĊĠĠĠĠĠĠĠ ĠDB Maker . file DB ( db File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. allocate Start Size ( DB _ START _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. allocate Increment ( DB _ INCREMENT _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. file M map Enable If Supported () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. file M map Pre clear Disable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. clean er Hack Enable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. close On Jvm Shutdown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. transaction Enable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. make () ĊĊĠĠĠ Ġfun Ġclose () Ġ= Ġdb . close () ĊĊĠĠĠ Ġfun Ġclear () Ġ= Ġdb . transact Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠ Ġenum Values < DB Collection >(). forEach Ġ{ Ġcoll Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoll . create Or Open ( db ). clear With Expire () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġchangelog : ĠS cry fall Change log ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Map Ġ= ĠDB Collection . METADATA . create Or Open ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmeta Map [" changelog "] Ġas ? ĠS cry fall Change log ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġdb . transact Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDB Collection . METADATA . create Or Open ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" changelog ", Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġall Cards : ĠList < Sc ry fall Card >? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollection Map Ġ= ĠDB Collection . COLLECTION S . create Or Open ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection Map [" all _ cards "] Ġas ? ĠList < Sc ry fall Card > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġdb . transact Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDB Collection . COLLECTION S . create Or Open ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" all _ cards ", Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġall Sets : ĠList < Sc ry fall Set >? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollection Map Ġ= ĠDB Collection . COLLECTION S . create Or Open ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcollection Map [" all _ sets "] Ġas ? ĠList < Sc ry fall Set > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġdb . transact Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDB Collection . COLLECTION S . create Or Open ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put (" all _ sets ", Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġurls Ġ= ĠDb Url Proxy ( db ) ĊĊĠĠĠ Ġclass ĠDb Url Proxy ( private Ġval Ġdb : ĠDB ) Ġ: ĠMutable Map < URL , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T > Ġread Proxy ( op : ĠHT ree Map < String , ĠAny >. () Ġ-> ĠT ): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDB Collection . URL S . create Or Open ( db ). let ( op ) ĊĊĠĠĠĠĠĠĠ Ġinline Ġprivate Ġfun Ġ< re ified ĠT > Ġwrite Proxy ( op : ĠHT ree Map < String , ĠAny >. () Ġ-> ĠT ): ĠT Ġ= Ġdb . transact Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDB Collection . URL S . create Or Open ( db ). let ( op ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( key : ĠURL ) Ġ= Ġread Proxy Ġ{ Ġthis [ key . toString ()] Ġas ĠString ? Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġput ( key : ĠURL , Ġvalue : ĠString ) Ġ= Ġwrite Proxy Ġ{ Ġthis . put ( key . toString (), Ġvalue ) Ġas ĠString ? Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove ( key : ĠURL ) Ġ= Ġwrite Proxy Ġ{ Ġthis . remove ( key . toString ()) Ġas ĠString ?} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclear () Ġ= Ġwrite Proxy Ġ{ Ġthis . clear () Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisEmpty () Ġ= Ġread Proxy Ġ{ Ġthis . isEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġread Proxy Ġ{ Ġthis . size Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġentries : ĠMutable Set < Mutable Map . Mutable Entry < URL , ĠString >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġread Proxy Ġ{ Ġthis . entries Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( k , Ġv ) Ġ-> ĠURL ( k ) Ġto Ġv Ġas ĠString } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. entries ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable Set () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains Key ( key : ĠURL ) Ġ= Ġread Proxy Ġ{ Ġthis . containsKey ( key . toString ()) Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains Value ( value : ĠString ) Ġ= Ġread Proxy Ġ{ Ġthis . contains Value ( value ) Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkeys : ĠMutable Set < URL > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġread Proxy Ġ{ Ġthis . keys . map Ġ{ ĠURL ( it ) Ġ}. to Mutable Set () Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalues : ĠMutable Collection < String > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġread Proxy Ġ{ Ġthis . values . map Ġ{ Ġit Ġas ĠString Ġ}. to Mutable List () Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġput All ( from : ĠMap < out ĠURL , ĠString >) Ġ= Ġwrite Proxy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . put All ( from . entries . map Ġ{ Ġ( k , Ġv ) Ġ-> Ġk . toString () Ġto Ġv }) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġcache Dir Ġ= Ġcreate TempDir () ĊĠĠĠ Ġcache Dir . delete On Exit () ĊĊĠĠĠ Ġval Ġcache 1 Ġ= ĠS cry fall Cache ( cacheDir ) ĊĠĠĠ Ġprintln ( cache 1 . changelog ) ĊĠĠĠ Ġcache 1 . changelog Ġ= ĠS cry fall Change log . fetch ( cache 1 . changelog ) ĊĠĠĠ Ġprintln ( cache 1 . changelog ) ĊĠĠĠ Ġcache 1 . close () ĊĊĠĠĠ Ġval Ġcache 2 Ġ= ĠS cry fall Cache ( cacheDir ) ĊĠĠĠ Ġprintln ( cache 2 . changelog ) ĊĠĠĠ Ġprintln ( cache 2 . changelog Ġ== ĠS cry fall Change log . fetch ( cache 2 . changelog )) ĊĠĠĠ Ġcache 2 . clear () ĊĠĠĠ Ġprintln ( cache 2 . changelog ) Ċ } Ċ