package Ġcom . line cy . dil id ili . data . presenter . search Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġcom . line cy . dil id ili . data . datasource . repository . Search Repository Ċ import Ġcom . line cy . dil id ili . data . model . Result Item Ċ import Ġcom . line cy . dil id ili . data . model . SearchResult Ċ import Ġcom . line cy . module . core . mvp . Rx Presenter Ċ import Ġcom . line cy . module . core . rx . subscribe By Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . js oup . nodes . Document Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* Ġ@ author Ġby Ġline cy . Ċ Ġ*/ Ċ class ĠSearch Presenter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġsearch Repository : ĠSearch Repository ) Ġ: ĠRx Presenter < Search View >() Ġ{ ĊĊĠ Ġprivate Ġlateinit Ġvar Ġcontent : ĠString ĊĠ Ġ/** ĊĠĠ Ġ* Ġæ Ĳ ľç´¢ ĊĠĠ Ġ*/ ĊĠ Ġfun Ġsearch ( content : ĠString ) Ġ{ ĊĠĠĠ Ġthis . content Ġ= Ġcontent ĊĠĠĠ Ġbase View ?. show Loading () ĊĠĠĠ Ġdis pos ables . add ( ĊĠĠĠĠĠĠĠ Ġobservable Result ( search Repository . search ( content ), Ġ 0 ). subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Schedulers . main Thread ()). subscribe By ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿ĩæ»¤ åĲİ æķ°æį® ä¸º null æĹ¶ ï¼Į ç»§ç»Ń åĬłè½½ ä¸ĭ ä¸Ģ é¡µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æŀģ ç«¯ æĥħåĨµä¸ĭ åı¯èĥ½ éľĢè¦ģ åĬłè½½ åĪ° æľĢåĲİ ä¸Ģ é¡µ æīį è¡Į ï¼Ł ï¼Ł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . list ?. size Ġ== Ġ 0 Ġ&& Ġit . total Page Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More ( it . currentPage Ġ+ Ġ 1 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. show Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. show Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠ Ġ} ĊĊĊĠ Ġfun Ġload More ( next : ĠInt , Ġis Init : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġif Ġ( isLoading ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠ Ġdis pos ables . add ( ĊĠĠĠĠĠĠĠ Ġobservable Result ( search Repository . load More Result ( this . content , Ġnext ), Ġnext ). subscribe On ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS chedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Schedulers . main Thread ()). subscribe By ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿ĩæ»¤ åĲİ æķ°æį® ä¸º null æĹ¶ ï¼Į ç»§ç»Ń åĬłè½½ ä¸ĭ ä¸Ģ é¡µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . list ?. size Ġ== Ġ 0 Ġ&& Ġit . currentPage Ġ+ Ġ 1 Ġ< Ġit . total Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload More ( it . currentPage Ġ+ Ġ 1 , Ġis Init ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. show Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. show More ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase View ?. hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġobservable Result ( observable : ĠObservable < Document >, ĊĠĠĠĠĠ Ġcurrent : ĠInt ): ĠObservable < SearchResult > Ġ{ ĊĠĠĠ Ġreturn Ġobservable . map Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . select ("# results ") ĊĠĠĠĠĠ Ġval Ġresult Count Ġ= Ġresult . select (" span . support - text - top "). text () ĊĊĠĠĠĠĠ Ġval Ġdiv Ġ= Ġresult . select (" div . result ") ĊĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Result Item >( div . size ) ĊĠĠĠĠĠ Ġval Ġp Ġ= ĠPattern . compile ("\\ d +") ĊĠĠĠĠĠ Ġval Ġm Ġ= Ġp . matcher ( result Count ) ĊĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 ĊĠĠĠĠĠ Ġif Ġ( m . find ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtotal Ġ= Ġif Ġ( 0 Ġ== Ġm . group (). toInt () Ġ% Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm . group (). toInt () Ġ/ Ġdiv . size ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm . group (). toInt () Ġ/ Ġdiv . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġdiv . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġit . select (" h 3 . c - title Ġa ") ĊĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġa [ 0 ]. attr (" href ") ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġa [ 0 ]. text (). substring Before ("- Ġåľ¨ çº¿ "). substring Before ("- åľ¨ çº¿ ") // è¿ĩæ»¤ æİī åľ¨ çº¿ ä¸ĭè½½ çŃī åĨħå®¹ ĊĠĠĠĠĠĠĠ Ġval Ġdetail Ġ= Ġit . select (" div . c - abstract "). text () ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġit . select (" img ") ĊĠĠĠĠĠĠĠ Ġvar Ġcover Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( img Ġ!= Ġnull Ġ&& Ġimg . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcover Ġ= Ġimg [ 0 ]. attr (" src ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// è¿ĩæ»¤ æİī æĹł åħ³ åĨħå®¹ , åı¯èĥ½ å¯¼èĩ´ å½ĵåīį é¡µ è¿ĩæ»¤ åĲİ æĹł æķ°æį® ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( title ) Ġ&& Ġ! title . startsWith (" åĺ Ģ åĵ © åĺ Ģ åĵ © ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlist . add ( Result Item ( title Ġ= Ġtitle , Ġcover Url Ġ= Ġcover , Ġdetail Ġ= Ġdetail , Ġlink Ġ= Ġlink )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠSearch Result ( result Count Ġ= Ġresult Count , Ġlist Ġ= Ġlist , ĠcurrentPage Ġ= Ġcurrent , ĊĠĠĠĠĠĠĠĠĠ Ġtotal Page Ġ= Ġtotal ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }