package Ġcom . win dea . plugin . idea . par ad ox . util Ċ Ċ import Ġcom . win dea . plugin . idea . par ad ox .* Ċ import Ġjava . net .* Ċ import Ġjava . net . http .* Ċ import Ġjava . net . http . HttpResponse .* Ċ import Ġjava . time .* Ċ import Ġjava . util . concurrent .* Ċ Ċ // https :// q un xing . h ui ji wiki . com / Ċ // https :// par ad ox . par ad ox wik is . com / Ċ // https :// q un xing . h ui ji wiki . com / wiki /% E 6 % 9 6 % 8 7 % E 4 % BB % B 6 : X xx . png Ċ // https :// par ad ox . par ad ox wik is . com / File : X xx . png Ċ Ċ /** Ċ Ġ* Ġ åĽ¾ æłĩ åľ°åĿĢ çļĦ è§£æŀĲ åĻ¨ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ åŁºäºİ åĲįç§° ä»¥åıĬ q un xing . h ui ji wiki . com åĴĮ par ad ox . par ad ox wik is . com ä¸ĬçļĦ æĸĩä»¶ è§£æŀĲ åĽ¾ æłĩ åľ°åĿĢ ãĢĤ Ċ Ġ*/ Ċ object ĠPar ad ox Icon Url Resolver Ġ{ Ċ ĉ private Ġconst Ġval Ġdelay : Long Ġ= Ġ 5 0 0 Ċ ĉ private Ġval Ġtimeout Ġ= ĠDuration . of Minutes ( 3 ) ĊĉĊ ĉ private Ġval ĠhttpClient Ġ= ĠHttpClient . newBuilder (). connect Timeout ( timeout ). build () Ċ ĉ private Ġval Ġbody Handler Ġ= ĠBody Handlers . of Lines () Ċ ĉ private Ġval Ġurl Cache Ġ= ĠConcurrent HashMap < String , ĠString >() Ċ ĉ private Ġval Ġexecutor Ġ= ĠExec utors . new Cached ThreadPool () Ċ ĉ private Ġval Ġdo Resolve Cache Ġ= ĠCopy On Write Array Set < String >() ĊĊ ĉ private Ġconst Ġval Ġunknown Icon Url Ġ= Ġ" https :// h ui ji - public . h ui j ist atic . com / q un xing / uploads / d / dd / Unknown . png " ĊĉĊ ĉ fun Ġresolve ( name : ĠString , default To Unknown : Boolean = true ): ĠString Ġ{ Ċĉ ĉ if ( name . isEmpty ()) Ġreturn ĠgetDefault Url ( default To Unknown ) Ċĉ ĉ return Ġtry Ġ{ Ċĉĉ ĉ // å°Ŀè¯ķ ä»İ ç¼ĵåŃĺ ä¸Ń èİ·åıĸ Ċĉĉ ĉ val Ġurl Ġ= Ġurl Cache [ name ] Ċĉĉ ĉ // å¦Ĥæŀľ åŃĺåľ¨ ï¼Į èĭ¥ æĺ¯ ç©º åŃĹç¬¦ä¸² åĪĻ è¿ĶåĽŀ é»ĺè®¤ åĽ¾ æłĩ ï¼Į åĲ¦åĪĻ çĽ´æİ¥ è¿ĶåĽŀ Ċĉĉ ĉ // å¦Ĥæŀľ ä¸įåŃĺåľ¨ ï¼Į åĪĻ åħĪ ä¿ĿåŃĺ ç©º åŃĹç¬¦ä¸² ï¼Į çĦ¶åĲİ å¼ĤæŃ¥ è§£æŀĲ åĽ¾ æłĩ ï¼Į çŃīå¾ħ ä¸Ģ æ®µ æĹ¶éĹ´ åĲİ ï¼Į åĨį æ¬¡ å°Ŀè¯ķ èİ·åıĸ åĽ¾ æłĩ Ċĉĉ ĉ if ( url Ġ!= Ġnull ) Ġreturn Ġurl . if Empty Ġ{ ĠgetDefault Url ( default To Unknown ) Ġ} Ċĉĉ ĉ resolve Url Async ( name ) Ċĉĉ ĉ Thread . sleep ( delay ) Ċĉĉ ĉ val Ġdelay Url Ġ= Ġurl Cache [ name ] Ċĉĉ ĉ if ( delay Url != Ġnull ) Ġreturn Ġdelay Url . if Empty Ġ{ ĠgetDefault Url ( default To Unknown ) Ġ} Ċĉĉ ĉ getDefault Url ( default To Unknown ) Ċĉ ĉ } catch ( e : ĠException ){ Ċĉĉ ĉ // å¦Ĥæŀľ åĩºçİ° å¼Ĥå¸¸ ï¼Į éĤ£ä¹Ī è¿ĶåĽŀ é»ĺè®¤ åĽ¾ æłĩ Ċĉĉ ĉ getDefault Url ( default To Unknown ) Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ private Ġfun ĠgetDefault Url ( default To Unknown : Boolean ): ĠString Ġ{ Ċĉ ĉ return Ġif ( default To Unknown ) Ġunknown Icon Url Ġelse Ġ"" Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġresolve Url Async ( name : ĠString ){ Ċĉ ĉ executor . execute Ġ{ Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ val Ġurl Ġ= Ġdo Resolve Url ( name ) Ċĉĉĉ ĉ url Cache [ name ] Ġ= Ġurl Ċĉĉ ĉ } catch ( e : ĠException ){ Ċĉĉĉ ĉ url Cache [ name ] Ġ= Ġ"" Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġdo Resolve Url ( name : ĠString ): ĠString Ġ{ Ċĉ ĉ return Ġdo Resolve Url From H ui ji wiki ( name ) Ġ?: Ġdo Resolve Url From Par ad ox wik is ( name ) Ġ?: Ġ"" Ċ ĉ } ĊĉĊ ĉ private Ġconst Ġval Ġh ui ji wiki Prefix Ġ= Ġ"< li >< a Ġhref =\" # file links \"> æĸĩä»¶ çĶ¨ éĢ Ķ </ a ></ li ></ ul >< div Ġclass =\" full Image Link \" Ġid =\" file \">< a Ġhref =\"" Ċ ĉ private Ġconst Ġval Ġh ui ji wiki Prefix Length Ġ= Ġh ui ji wiki Prefix . length ĊĉĊ ĉ private Ġfun Ġdo Resolve Url From H ui ji wiki ( name : ĠString ): ĠString ? Ġ{ Ċĉ ĉ val Ġurl Ġ= Ġh ui ji wiki P ng Url ( name ) Ċĉ ĉ val Ġuri Ġ= run Catch ing Ġ{ ĠURI . create ( url )}. getOrElse Ġ{ Ġreturn Ġnull Ġ} Ċĉ ĉ val ĠhttpResponse Ġ= ĠhttpClient . send ( HttpRequest . newBuilder (). GET (). uri ( uri ). build (), Ġbody Handler ) Ċĉ ĉ if ( httpResponse . statusCode () Ġ== Ġ 2 0 0 ) Ġ{ Ċĉĉ ĉ val Ġlines Ġ= ĠhttpResponse . body () Ċĉĉ ĉ return Ġlines . filter Ġ{ Ċĉĉĉ ĉ it . startsWith ( h ui ji wiki Prefix ) Ċĉĉ ĉ }. map Ġ{ Ċĉĉĉ ĉ val Ġindex Ġ= Ġit . indexOf ( h ui ji wiki Prefix ) Ċĉĉĉ ĉ val ĠstartIndex Ġ= Ġindex Ġ+ Ġh ui ji wiki Prefix Length Ċĉĉĉ ĉ val Ġend Index Ġ= Ġit . indexOf (' "', ĠstartIndex Ġ+ Ġ 1 ) Ċĉĉĉ ĉ it . substring ( startIndex , Ġend Index ) Ċĉĉ ĉ }. findFirst (). orElse ( null ) Ċĉ ĉ } Ċĉ ĉ return Ġnull Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġh ui ji wiki P ng Url ( name : String ): ĠString Ġ{ Ċĉ ĉ val Ġfq Name Ġ= Ġwhen { Ċĉĉ ĉ name Ġ== Ġ" pop s " Ġ-> Ġ" Pop " Ċĉĉ ĉ name Ġ== Ġ" origin _ default " Ġ-> Ġ" Pro sp erous _ Un ification " Ċĉĉ ĉ name . startsWith (" origin _ ") Ġ-> Ġname . remove Prefix (" origin _ "). to Capital ized Words () Ċĉĉ ĉ else Ġ-> Ġname . to Capital ized Word () Ċĉ ĉ } Ċĉ ĉ return Ġ" https :// q un xing . h ui ji wiki . com / wiki /% E 6 % 9 6 % 8 7 % E 4 % BB % B 6 :$ fq Name . png " Ċ ĉ } ĊĉĊ ĉ private Ġconst Ġval Ġpar ad ox wik is Prefix Ġ= Ġ"< div Ġclass =\" full Image Link \" Ġid =\" file \">< a Ġhref =\"" Ċ ĉ private Ġconst Ġval Ġpar ad ox wik is Prefix Length Ġ= Ġpar ad ox wik is Prefix . length ĊĉĊ ĉ private Ġfun Ġdo Resolve Url From Par ad ox wik is ( name : ĠString ): ĠString ? Ġ{ Ċĉ ĉ val Ġurl Ġ= Ġpar ad ox wik is P ng Url ( name ) Ċĉ ĉ val Ġuri Ġ= run Catch ing Ġ{ ĠURI . create ( url )}. getOrElse Ġ{ Ġreturn Ġnull Ġ} Ċĉ ĉ val ĠhttpResponse Ġ= ĠhttpClient . send ( HttpRequest . newBuilder (). GET (). uri ( uri ). build (), Ġbody Handler ) Ċĉ ĉ if ( httpResponse . statusCode () Ġ== Ġ 2 0 0 ) Ġ{ Ċĉĉ ĉ val Ġlines Ġ= ĠhttpResponse . body () Ċĉĉ ĉ return Ġlines . filter Ġ{ Ċĉĉĉ ĉ it . startsWith ("< li >") Ġ&& Ġit . contains ( par ad ox wik is Prefix ) Ċĉĉ ĉ }. map Ġ{ Ċĉĉĉ ĉ val Ġindex Ġ= Ġit . indexOf ( par ad ox wik is Prefix ) Ċĉĉĉ ĉ val ĠstartIndex Ġ= Ġindex Ġ+ Ġpar ad ox wik is Prefix Length Ċĉĉĉ ĉ val Ġend Index Ġ= Ġit . indexOf (' "', ĠstartIndex Ġ+ Ġ 1 ) Ċĉĉĉ ĉ par ad ox wik is Url Ġ+ Ġ Ġit . substring ( startIndex , Ġend Index ) Ċĉĉ ĉ }. findFirst (). orElse ( null ) Ċĉ ĉ } Ċĉ ĉ return Ġnull Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġpar ad ox wik is P ng Url ( name : String ): ĠString Ġ{ Ċĉ ĉ val Ġfq Name Ġ= Ġwhen { Ċĉĉ ĉ name Ġ== Ġ" pop s " Ġ-> Ġ" Pop " Ċĉĉ ĉ name Ġ== Ġ" origin _ f allen _ emp ire " Ġ-> Ġ" Orig ins _ el der _ race " Ċĉĉ ĉ name . startsWith (" origin ") Ġ-> Ġname . replace (" origin "," Orig ins _ ") Ċĉĉ ĉ else Ġ-> Ġname . to Capital ized Word () Ċĉ ĉ } Ċĉ ĉ return Ġ" https :// par ad ox . par ad ox wik is . com / File :$ fq Name . png " Ċ ĉ } Ċ } ĊĊ