package Ġorg . wikipedia . history . db Ċ Ċ import Ġandroidx . room . Dao Ċ import Ġandroidx . room . Query Ċ import Ġandroidx . room . Rewrite Queries To Drop Unused Columns Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġorg . wikipedia . history . History Entry Ċ import Ġorg . wikipedia . search . SearchResult Ċ import Ġorg . wikipedia . search . SearchResults Ċ import Ġjava . text . DateFormat Ċ import Ġjava . util .* Ċ Ċ @ Dao Ċ interface ĠHistory Entry With Image Dao Ġ{ ĊĊĠĠĠ Ġ// ĠTODO : Ġconvert Ġto ĠP aging Source . ĊĠĠĠ Ġ// Ġhttps :// developer . android . com / topic / libraries / architecture / paging / v 3 - overview ĊĠĠĠ Ġ@ Query (" SELECT ĠHistory Entry .*, ĠPage Image . image Name ĠFROM ĠHistory Entry ĠLEFT ĠOUT ER ĠJOIN ĠPage Image ĠON Ġ( History Entry . namespace Ġ= ĠPage Image . namespace ĠAND ĠHistory Entry . api Title Ġ= ĠPage Image . api Title ĠAND ĠHistory Entry . lang Ġ= ĠPage Image . lang ) ĠWHERE ĠUPPER ( History Entry . display Title ) ĠLIKE ĠUPPER (: term ) ĠESC APE Ġ'\\ ' ĠORDER ĠBY Ġtimestamp ĠDESC ") ĊĠĠĠ Ġ@ Rewrite Queries To Drop Unused Columns ĊĠĠĠ Ġfun Ġfind Entries By Search Term ( term : ĠString ): ĠList < History Entry With Image > ĊĊĠĠĠ Ġ// ĠTODO : Ġconvert Ġto ĠP aging Source . ĊĠĠĠ Ġ@ Query (" SELECT ĠHistory Entry .*, ĠPage Image . image Name ĠFROM ĠHistory Entry ĠLEFT ĠOUT ER ĠJOIN ĠPage Image ĠON Ġ( History Entry . namespace Ġ= ĠPage Image . namespace ĠAND ĠHistory Entry . api Title Ġ= ĠPage Image . api Title ĠAND ĠHistory Entry . lang Ġ= ĠPage Image . lang ) ĠWHERE Ġsource Ġ!= Ġ: exclude Source 1 ĠAND Ġsource Ġ!= Ġ: exclude Source 2 ĠAND Ġsource Ġ!= Ġ: exclude Source 3 ĠAND Ġtime Sp ent Sec Ġ>= Ġ: min Time Sp ent ĠORDER ĠBY Ġtimestamp ĠDESC ĠLIMIT Ġ: limit ") ĊĠĠĠ Ġ@ Rewrite Queries To Drop Unused Columns ĊĠĠĠ Ġfun Ġfind Entries By ( exclude Source 1 : ĠInt , Ġexclude Source 2 : ĠInt , Ġexclude Source 3 : ĠInt , Ġmin Time Sp ent : ĠInt , Ġlimit : ĠInt ): ĠList < History Entry With Image > ĊĊĠĠĠ Ġfun Ġfind History Item ( search Query : ĠString ): ĠSearch Results Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnormalized Query Ġ= ĠStringUtils . strip Acc ents ( search Query ). lowercase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( normalized Query . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSearch Results () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnormalized Query Ġ= Ġnormalized Query . replace ("\\ ", Ġ" \\\\ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% ", Ġ"\\ % "). replace ("_ ", Ġ"\\ _ ") ĊĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġfind Entries By Search Term ("% $ normalized Query % ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( entries . isEmpty ()) ĠSearch Results () ĊĠĠĠĠĠĠĠ Ġelse ĠSearch Results ( entries . take ( 3 ). map Ġ{ ĠSearch Result ( to History Entry ( it ). title , ĠSearch Result . SearchResult Type . HISTORY ) Ġ}. to Mutable List ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfilter History Items ( search Query : ĠString ): ĠList < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Any >() ĊĠĠĠĠĠĠĠ Ġval Ġnormalized Query Ġ= ĠStringUtils . strip Acc ents ( search Query ). lowercase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\\ ", Ġ" \\\\ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% ", Ġ"\\ % ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("_ ", Ġ"\\ _ ") ĊĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġfind Entries By Search Term ("% $ normalized Query % ") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġentries . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġprevious Ġitem , Ġsee Ġif Ġthe Ġtimes Ġdiffer Ġenough ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthey Ġdo , Ġdisplay Ġthe Ġsection Ġheader . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlways Ġdo Ġit Ġif Ġthis Ġis Ġthe Ġfirst Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġprevious Ġitem , Ġsee Ġif Ġthe Ġtimes Ġdiffer Ġenough ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthey Ġdo , Ġdisplay Ġthe Ġsection Ġheader . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlways Ġdo Ġit Ġif Ġthis Ġis Ġthe Ġfirst Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Time : ĠString Ġ= Ġget DateString ( entries [ i ]. timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Time : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Time Ġ= Ġget DateString ( entries [ i Ġ- Ġ 1 ]. timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Time Ġ!= Ġprev Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( cur Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( cur Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( to History Entry ( entries [ i ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Entry For Read More ( age : ĠInt , Ġmin Time Sp ent : ĠInt ): ĠList < History Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġfind Entries By ( History Entry . SOURCE _ MAIN _ PAGE , ĠHistory Entry . SOURCE _ RANDOM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Entry . SOURCE _ FEED _ MAIN _ PAGE , Ġmin Time Sp ent , Ġage Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . map Ġ{ Ġto History Entry ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto History Entry ( entry With Image : ĠHistory Entry With Image ): ĠHistory Entry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentry Ġ= ĠHistory Entry ( entry With Image . authority , Ġentry With Image . lang , Ġentry With Image . api Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry With Image . display Title , Ġ 0 , Ġentry With Image . namespace , Ġentry With Image . timestamp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry With Image . source , Ġentry With Image . time Sp ent Sec ) ĊĠĠĠĠĠĠĠ Ġentry . title . thumb Url Ġ= Ġentry With Image . image Name ĊĠĠĠĠĠĠĠ Ġreturn Ġentry ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget DateString ( date : ĠDate ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDate Format . getDate Instance (). format ( date ) ĊĠĠĠ Ġ} Ċ } Ċ