import Ġnet . sf . image 4 j . codec . ico . ICO Decoder Ċ import Ġorg . js oup . J soup Ċ import Ġjava . awt . Image Ċ import Ġjava . awt . Rendering Hints Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . net . URL Ċ import Ġjavax . image io . Image IO Ċ import Ġjavax . swing . Icon Ċ import Ġjavax . swing . Image Icon Ċ Ċ object ĠF av icon Fetcher Ġ{ ĊĠĠĠ Ġfun Ġget Fav icon ( url : ĠString ) Ġ: ĠImage ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( url Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhref Ġ= Ġget H RE FF rom Index Page ( url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhref Ġ= Ġget Protocol And Domain ( url ) Ġ+ Ġ"/ favicon . ico " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Url Ġ= Ġicon URL From H REF ( href , Ġurl ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġicon From URL ( icon Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġicon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget H RE FF rom Index Page ( url : ĠString ) Ġ: ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhref Ġ: ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠJ soup . connect ( url ). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġdoc . head (). select (" link [ href ~ = .* \\ .( ico | png | gif )] "). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhref Ġ= Ġelement . attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ Fav icon Fetcher ] ĠJ soup Ġcouldn 't Ġget Ġpage : Ġ" Ġ+ Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhref ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġicon URL From H REF ( href : ĠString , Ġoriginal Url : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġicon Url Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( href . startsWith (" http ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Url Ġ= Ġhref ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrel Part Ġ= Ġ"/" Ġ+ Ġhref ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href . startsWith ("/ ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrel Part Ġ= Ġhref ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpath Ġ= Ġget Protocol And Domain ( original Url ) Ġ+ Ġrel Part ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Url Ġ= Ġpath ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġicon Url ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Protocol And Domain ( url : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprotocol And Domain Ġ= ĠURL ( url ). host ĊĠĠĠĠĠĠĠ Ġif Ġ(! protocol And Domain . startsWith (" http ")) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Prefix Ġhttp Ġor Ġhttps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotocol And Domain Ġ= Ġurl . substring ( 0 , Ġurl . indexOf First Ġ{ Ġc Ġ-> Ġc Ġ== Ġ'/' }) Ġ+ Ġ"// " Ġ+ Ġprotocol And Domain ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprotocol And Domain ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġicon From URL ( url String : ĠString ) Ġ: ĠImage ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage : ĠImage ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url String . endsWith (". ico ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ istr Ġ= ĠURL ( url String ). open Stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠI CO Decoder . read ( istr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! list . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġlist . get ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( url String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= ĠImage IO . read ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ Fav icon Fetcher ] ĠFailed Ġto Ġdownload Ġicon : Ġ" Ġ+ Ġurl String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġimage ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Scaled Image ( src Img : ĠImage , Ġw : ĠInt , Ġh : ĠInt ): ĠImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresized Img Ġ= ĠBufferedImage ( w , Ġh , ĠBufferedImage . TYPE _ INT _ ARGB ) ĊĠĠĠĠĠĠĠ Ġval Ġg 2 Ġ= Ġresized Img . create Graphics () ĊĊĠĠĠĠĠĠĠ Ġg 2 . set Rendering Hint ( Rendering Hints . KEY _ INTER POL ATION , ĠRendering Hints . VALUE _ INTER POL ATION _ B IL INE AR ) ĊĠĠĠĠĠĠĠ Ġg 2 . drawImage ( src Img , Ġ 0 , Ġ 0 , Ġw , Ġh , Ġnull ) ĊĠĠĠĠĠĠĠ Ġg 2 . dispose () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresized Img ĊĠĠĠ Ġ} Ċ }