package Ġcom . poly g lot android . core Ċ Ċ import Ġorg . js oup . J soup Ċ import Ġorg . w 3 c . dom . Document Ċ import Ġorg . xml . sax . Input Source Ċ import Ġjava . io . IOException Ċ import Ġjava . io . String Reader Ċ import Ġjava . net . Inet SocketAddress Ċ import Ġjava . net . Malformed URLException Ċ import Ġjava . net . Socket Ċ import Ġjava . net . URL Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Matcher Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . xml . parsers . Document Builder Ċ import Ġjavax . xml . parsers . Document BuilderFactory Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġhandles Ġall Ġweb Ġcommunication Ġto Ġand Ġfrom ĠPoly G lot Android Ċ Ġ*/ Ċ class ĠWeb Interface Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠChecks Ġfor Ġupdates Ġto ĠPoly G lot Ġand Ġreturn ĠThe ĠXML Ġdocument Ġretrieved ĊĠĠĠĠĠĠĠĠ Ġ* Ġfrom Ġthe Ġweb Ġand Ġthrows Ġ[ Exception ] Ġif Ġthere Ġis Ġa Ġproblem . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġcheck For Updates (): ĠDocument ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġret : ĠDocument ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġxml Text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠURL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= ĠURL ( PG Util . UPDATE _ FILE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . open Stream (). use Ġ{ Ġ` is ` Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScanner (` is `). use Ġ{ Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( s . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Text Ġ+= Ġs . nextLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠMal formed URLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Server Ġunavailable Ġor Ġnot Ġfound .", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Update Ġfile Ġnot Ġfound Ġor Ġhas Ġbeen Ġmoved . ĠPlease Ġcheck Ġfor Ġupdates Ġmanually Ġat ĠPoly G lot Ġhomepage .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Text . contains ("< TITLE > Moved ĠTemp or arily </ TITLE > ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Update Ġfile Ġnot Ġfound Ġor Ġhas Ġbeen Ġmoved . ĠPlease Ġcheck Ġfor Ġupdates Ġmanually Ġat ĠPoly G lot Ġhomepage .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Text . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory : ĠDocument BuilderFactory Ġ= ĠDocument BuilderFactory . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠDocument Builder Ġ= Ġfactory . new Document Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` is ` Ġ= ĠInput Source ( String Reader ( xml Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġbuilder . parse (` is `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġonly Ġtext Ġfrom Ġa ĠP Text Pane 's Ġ[ html ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetText From Html ( html : ĠString ): ĠString Ġ= ĠJ soup . parse ( html ). text () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTakes Ġarchived Ġ[ html ] Ġand Ġtrans lates Ġit Ġinto Ġdisplay ĠHTML . ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe places Ġarch ival Ġimage Ġreferences Ġto Ġtemp Ġimage Ġrefs ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcore ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġun arch ived Ġhtml ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws Ġjava . lang . Exception ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( java . lang . Exception :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġun archive HTML ( html : ĠString , Ġcore : ĠDict Core ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpattern Ġfor Ġfinding Ġarchived Ġimages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhtml Ġ= Ġhtml ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern : ĠPattern Ġ= ĠPattern . compile (" (< img Ġsrc =\" [^ >, _ ]+ \"> )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher : ĠMatcher Ġ= Ġpattern . matcher ( html ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreg Path : ĠString ? Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg Path Ġ= Ġreg Path . replace ("< img Ġsrc =\" ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg Path Ġ= Ġreg Path . replace (" \"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg Path Ġ= Ġreg Path . replace ("> ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Id Ġ= Ġreg Path . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage : ĠImage Node Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcore . getImage Collection (). getNode ById ( image Id ) Ġas ĠImage Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< img Ġsrc =\" $ reg Path \"> ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< img Ġsrc =\" file :// /" Ġ+ Ġimage . getImage Path (). toString () Ġ+ Ġ"\ ">" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . Exception (" problem Ġloading Ġimage Ġ: Ġ" Ġ+ Ġe . localized Message , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . Exception (" problem Ġloading Ġimage Ġ: Ġ" Ġ+ Ġe . localized Message , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhtml ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTakes Ġdisplay ĠHTML Ġand Ġtrans lates Ġit Ġinto Ġarch ival ĠHTML . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ- ĠRe places Ġactual Ġimage Ġreferences Ġwith Ġstatic , Ġid Ġbased Ġrefs ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġhtml Ġun arch ived Ġhtml ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġarch iv able Ġhtml ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġarchive HTML ( html : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpattern Ġfor Ġfinding Ġun arch ived Ġimages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhtml Ġ= Ġhtml ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPattern . compile (" (< img Ġsrc =\" [^ >, _ ]+ _[ ^ > ]+ \"> )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġpattern . matcher ( html ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreg Path Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg Path Ġ= Ġreg Path . replace ("< img Ġsrc =\" file :// /", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg Path Ġ= Ġreg Path . replace (" \"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg Path Ġ= Ġreg Path . replace ("> ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName : ĠString ? Ġ= ĠIO Handler . get Filename From Path ( reg Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarc Path Ġ= ĠfileName . replace First (" _. * ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Ġ= Ġhtml . replace (" file :// /$ reg Path ", Ġarc Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhtml ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġcycles Ġthrough Ġthe Ġbody Ġof ĠHTML Ġand Ġgenerates Ġan Ġordered Ġlist Ġof Ġobjects ĊĠĠĠĠĠĠĠĠ Ġ* Ġrepresenting Ġall Ġof Ġthe Ġitems Ġin Ġthe ĠHTML . ĠCon sum ers Ġare Ġresponsible Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġidentifying Ġobjects . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġhtml ĠHTML Ġto Ġextract Ġfrom ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws Ġjava . io . IOException ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġget Elements HTML Body ( html : ĠString ): ĠList < Any >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret : ĠMutable List < Any > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbody Ġ= Ġhtml . replace (" .* < body >". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġbody . replace ("</ body > .* ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPattern . compile (" ([^ < ]+ |< [^ > ]+ >) ") Ġ// (" (< [^ > ]+ >) "); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġpattern . matcher ( body ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġloops Ġon Ġun inc umber ed Ġtext Ġand Ġtags . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( token . startsWith ("< ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( token . contains ("< img Ġsrc =\"" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken . replace ("< img Ġsrc =\" file :// /", Ġ""). replace ("\ "> ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret . add ( IO Handler . getImage ( path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing Ġwith Ġun recognized Ġelements Ġ- Ġmight Ġbe Ġupgraded Ġlater . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġplaintext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadd Ġ= Ġtoken . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! add . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret . add ("$ add Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTests Ġcurrent Ġinternet Ġconnection Ġbased Ġon Ġgoogle ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġconnected ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Internet Connected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġ" www . google . com " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠPORT Ġ= Ġ 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠTIME OUT Ġ= Ġ 5 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġret Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSocket (). use Ġ{ Ġsoc Ġ-> Ġsoc . connect ( Inet SocketAddress ( address , ĠPORT ), ĠTIME OUT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO Handler . write Error Log ( e , Ġ" Unable Ġto Ġreach : Ġ$ address ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }