package Ġcom . s ui han 7 4 . sat ena . models . browser Ċ Ċ import Ġandroidx . room .* Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Local Time Ċ Ċ @ Dao Ċ interface ĠBrowser Dao Ġ{ ĊĊĠĠĠ Ġ// Ġ--- Ġhistory Ġ--- Ġ// ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽ´ è¿ĳ ãģ® éĸ ² è¦§ å± ¥ æŃ ´ ãĤĴæĮĩå®ļ ä»¶ æķ° åıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect Ġ* Ġfrom Ġbrowser _ history _ items ĊĠĠĠĠĠĠĠ Ġorder Ġby Ġvisited At Ġdesc ĊĠĠĠĠĠĠĠ Ġlimit Ġ: offset , Ġ: limit ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġget Recent Hist ories ( offset : ĠInt Ġ= Ġ 0 , Ġlimit : ĠInt Ġ= Ġ 1 0 ) Ġ: ĠList < History > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĮĩå®ļ URL ãģ® ãĥļãĥ¼ãĤ¸ æĥħåł± ãĤĴåıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect Ġ* Ġfrom Ġbrowser _ history _ pages ĊĠĠĠĠĠĠĠ Ġwhere Ġurl =: url ĊĠĠĠĠĠĠĠ Ġlimit Ġ 1 ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġget History Page ( url : ĠString ): ĠHistory Page ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľĢ å¾Į ãģ« è¨ ª ãĤĮ ãģŁ ãģ® ãģĮ æĮĩå®ļ æľŁ éĸĵ ãģ® ãĥļãĥ¼ãĤ¸ æĥħåł± ãĤĴåıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect Ġ* Ġfrom Ġbrowser _ history _ pages ĊĠĠĠĠĠĠĠ Ġwhere Ġlast Vis ited >= : start Ġand Ġlast Vis ited <: end ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġfind History Pages ( start : ĠLocalDateTime , Ġend : ĠLocalDateTime ) Ġ: ĠList < History Page > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĮĩå®ļ æĹ¥ æĻĤ ãģ® éĸ ² è¦§ å± ¥ æŃ ´ ãĤĴåıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ å®Įåħ¨ ãģ« ä¸Ģèĩ´ ãģĻãĤĭ æĻĤ åĪ» ãĤĴæĮĩå®ļ ãģĻãĤĭå¿ħè¦ģ ãģĮãģĤãĤĭ ãģŁãĤģ ãĢģ ĊĠĠĠĠ Ġ* Ġ ä¸» ãģ« å± ¥ æŃ ´ è¿½åĬł çĽ´ å¾Į ãģ« ID ãģĮ ä»ĺ åĬł ãģķãĤĮãģŁ ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ãĤĴ åĨį åıĸå¾Ĺ ãģĻãĤĭãģŁãĤģ ãģ« ä½¿çĶ¨ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect Ġ* Ġfrom Ġbrowser _ history _ items ĊĠĠĠĠĠĠĠ Ġwhere Ġvisited At Ġ= Ġ: visited ĊĠĠĠĠĠĠĠ Ġlimit Ġ 1 ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġget History ( visited : ĠLocalDateTime ) Ġ: ĠHistory ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĮĩå®ļ æľŁ éĸĵ åĨħ ãģ§ æĮĩå®ļ ãĥļãĥ¼ãĤ¸ ãĤĴåıĤçħ§ ãģĹãģ¦ãģĦãĤĭ éĸ ² è¦§ å± ¥ æŃ ´ ãĤĴåıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect Ġ* Ġfrom Ġbrowser _ history _ items ĊĠĠĠĠĠĠĠ Ġwhere Ġvisited At >= : start Ġand Ġvisited At <: end Ġand Ġpage Id Ġ= Ġ: page Id ĊĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġfind History ( page Id : ĠLong , Ġstart : ĠLocalDateTime , Ġend : ĠLocalDateTime ) Ġ: ĠList < History Log > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å± ¥ æŃ ´ ãĤĴ æ¤ ľç´¢ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect Ġ* Ġfrom Ġbrowser _ history _ items ĊĠĠĠĠĠĠĠ Ġwhere Ġpage Id Ġin Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Ġid Ġfrom Ġbrowser _ history _ pages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġtitle Ġlike Ġ: query Ġor Ġurl Ġlike Ġ: query ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġorder Ġby Ġvisited At Ġdesc ĊĠĠĠĠĠĠĠ Ġlimit Ġ: offset , Ġ: limit ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġ__ find History ( query : ĠString , Ġoffset : ĠInt , Ġlimit : ĠInt ) Ġ: ĠList < History > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å± ¥ æŃ ´ ãĤĴ æ¤ ľç´¢ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġsuspend Ġfun Ġfind History ( query : ĠString Ġ= Ġ"", Ġoffset : ĠInt Ġ= Ġ 0 , Ġlimit : ĠInt Ġ= Ġ 1 0 ) Ġ: ĠList < History > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( query . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Recent Hist ories ( offset , Ġlimit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodified Query Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegex (""" [% _] "" "). let Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ${ query . replace ( r ) Ġ{ Ġm Ġ-> Ġ"\ \" Ġ+ Ġm . value Ġ}} %" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ__ find History ( modified Query , Ġoffset , Ġlimit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĠĠĠ Ġ// ĠINSERT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ļ ãĥ¼ãĤ¸ æĥħåł± ãĤĴ è¿½åĬł ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ å¤ĸéĥ¨ ãģĭãĤī çĽ´æİ¥ ä½¿çĶ¨ ãģĹãģªãģĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Insert ( on Conflict Ġ= ĠOn Conflict Strategy . REPLACE ) ĊĠĠĠ Ġsuspend Ġfun Ġ__ insert History Page ( page : ĠHistory Page ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ Ń ãĤ° ãĤĴ è¿½åĬł ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ å¤ĸéĥ¨ ãģĭãĤī çĽ´æİ¥ ä½¿çĶ¨ ãģĹãģªãģĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Insert ( on Conflict Ġ= ĠOn Conflict Strategy . REPLACE ) ĊĠĠĠ Ġsuspend Ġfun Ġ__ insert History Log ( item : ĠHistory Log ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĸ ² è¦§ å± ¥ æŃ ´ ãĤĴ è¿½åĬł ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġãĥ ļ ãĥ¼ãĤ¸ æĥħåł± ãĤĴ è¿½åĬł or æĽ´æĸ° ãģĹãģŁ å¾Į ãģ« ãģĿãģ® ãĥļãĥ¼ãĤ¸ ID ãĤĴ è¿½åĬł ãģĹãģŁ ãĥŃãĤ° ãĤĴ è¿½åĬł ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ å¤ĸéĥ¨ ãģĭãĤī ãģ¯ ãģĵãģ® ãĥ¡ ãĤ½ãĥĥãĥī ãĤĴä½¿çĶ¨ãģĹãģ¦ éłħ çĽ® è¿½åĬł ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġsuspend Ġfun Ġinsert History ( history : ĠHistory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ__ insert History Page ( history . page ) ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġget History Page ( history . page . url ) !! ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĲĮ æĹ¥ åĨħ ãģ® åĲĮ ä¸Ģ URL å± ¥ æŃ ´ ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġhistory . log . visited At . to LocalDate () ĊĠĠĠĠĠĠĠ Ġval Ġstart OfDay Ġ= ĠLocal Time . of Second OfDay ( 0 L ) ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠLocalDateTime . of ( date , Ġstart OfDay ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠLocalDateTime . of ( date . plus Days ( 1 L ), Ġstart OfDay ) ĊĠĠĠĠĠĠĠ Ġfind History ( page . id , Ġstart , Ġend ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete History Log ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġhistory . log . copy ( page Id Ġ= Ġpage . id ) ĊĠĠĠĠĠĠĠ Ġ__ insert History Log ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĠĠĠ Ġ// ĠDELETE ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ļ ãĥ¼ãĤ¸ æĥħåł± ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åĬł ãģĪ ãģ¦ ãĢģ è© ² å½ĵ ãģ® ãĥļãĥ¼ãĤ¸ æĥħåł± ãĤĴåıĤçħ§ ãģĻãĤĭ ãģĻãģ¹ãģ¦ãģ® ãĥŃãĤ° ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġsuspend Ġfun Ġdelete History Page ( page : ĠHistory Page ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete History Log sWith Page ( page . id ) ĊĠĠĠĠĠĠĠ Ġ__ delete History Page Impl ( page ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ļ ãĥ¼ãĤ¸ æĥħåł± ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ å¤ĸéĥ¨ ãģĭãĤī ãģ¯ çĽ´æİ¥ ä½¿çĶ¨ ãģĹãģªãģĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Delete ĊĠĠĠ Ġsuspend Ġfun Ġ__ delete History Page Impl ( page : ĠHistory Page ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľĢ çµĤ è¨ ª åķı æĹ¥ æĻĤ ãģĮ æĮĩå®ļ ãģĹãģŁ æľŁ éĸĵ åĨħ ãģ® åħ¨ ãģ¦ ãģ® ãĥļãĥ¼ãĤ¸ æĥħåł± ï¼Ī ãģ¨ ãģĿãĤĮ ãĤĴåıĤçħ§ ãģĻãĤĭ éĸ ² è¦§ å± ¥ æŃ ´ ï¼ī ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġsuspend Ġfun Ġdelete History Pages ( start : ĠLocalDateTime , Ġend : ĠLocalDateTime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind History Pages ( start , Ġend ). forEach Ġ{ Ġpage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete History Log sWith Page ( page . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete History Page ( page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ Ń ãĤ° ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Delete ĊĠĠĠ Ġsuspend Ġfun Ġdelete History Log ( item : ĠHistory Log ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è© ² å½ĵ ãģ® ãĥļãĥ¼ãĤ¸ ID ãĤĴ ãĤĤ ãģ¤ åħ¨ ãģ¦ ãģ® ãĥŃãĤ° ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġdelete Ġfrom Ġbrowser _ history _ items ĊĠĠĠĠĠĠĠ Ġwhere Ġpage Id Ġ= Ġ: page Id ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġdelete History Log sWith Page ( page Id : ĠLong ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĮĩå®ļ ãģĹãģŁ æľŁ éĸĵ åĨħ ãģ® åħ¨ ãģ¦ ãģ® ãĥŃãĤ° ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġdelete Ġfrom Ġbrowser _ history _ items ĊĠĠĠĠĠĠĠ Ġwhere Ġvisited At >= : start Ġand Ġvisited At <: end ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġdelete History ( start : ĠLocalDateTime , Ġend : ĠLocalDateTime ) ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĠĠĠ Ġ// ĠCLEAR ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ¨ ãģ¦ ãģ® ãĥŃãĤ° ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (" delete Ġfrom Ġbrowser _ history _ items ") ĊĠĠĠ Ġsuspend Ġfun Ġclear History Logs () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ¨ ãģ¦ ãģ® ãĥļãĥ¼ãĤ¸ æĥħåł± ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ãģĵãĤĮ ãĤĴä½¿çĶ¨ ãģĻãĤĭ éļ Ľ ãģ«ãģ¯ ãĥŃãĤ° æĥħåł± ãĤĤ ä½ µ ãģĽ ãģ¦ åħ¨ åīĬéĻ¤ ãģĻãĤĭå¿ħè¦ģ ãģĮãģĤãĤĭ ãģ®ãģ§ ãĢģ å¤ĸéĥ¨ ãģĭãĤī çĽ´æİ¥ ä½¿çĶ¨ ãģĹãģ¦ ãģ¯ ãģĦ ãģĳ ãģªãģĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Query (" delete Ġfrom Ġbrowser _ history _ pages ") ĊĠĠĠ Ġsuspend Ġfun Ġ__ clear History Pages () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ¨ ãģ¦ ãģ® éĸ ² è¦§ å± ¥ æŃ ´ ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġsuspend Ġfun Ġclear History () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear History Logs () ĊĠĠĠĠĠĠĠ Ġ__ clear History Pages () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ--------------- Ġ// ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġbrowser _ history _ items ĠĊĠĠĠĠĠĠĠ ĠWHERE ĠNOT ĠEXISTS Ġ( SELECT Ġ* ĠFROM Ġbrowser _ history _ pages Ġp ĠWHERE Ġp . id Ġ= Ġbrowser _ history _ items . page Id ) ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġsuspend Ġfun Ġrestore History Table _ v 1 9 2 () Ċ } Ċ