@@ -68,9 +68,10 @@ impl Manager {
6868 pub fn clear_messages (
6969 & mut self ,
7070 kind : history:: Kind ,
71+ clients : & client:: Map ,
7172 ) -> Option < BoxFuture < ' static , Message > > {
7273 if let Some ( history) = self . data . map . get_mut ( & kind) {
73- let task = history. flush ( None ) ;
74+ let task = history. flush ( None , clients . get_seed ( & kind ) ) ;
7475
7576 match history {
7677 History :: Full {
@@ -98,13 +99,17 @@ impl Manager {
9899 pub fn track (
99100 & mut self ,
100101 new_resources : HashSet < Resource > ,
102+ clients : Option < & client:: Map > ,
101103 ) -> Vec < BoxFuture < ' static , Message > > {
102104 let added = new_resources. difference ( & self . resources ) . cloned ( ) ;
103105 let removed = self . resources . difference ( & new_resources) . cloned ( ) ;
104106
105107 let added = added. into_iter ( ) . map ( |resource| {
108+ let seed =
109+ clients. and_then ( |clients| clients. get_seed ( & resource. kind ) ) ;
110+
106111 async move {
107- history:: load ( resource. kind . clone ( ) )
112+ history:: load ( resource. kind . clone ( ) , seed )
108113 . map ( move |result| Message :: LoadFull ( resource. kind , result) )
109114 . await
110115 }
@@ -137,8 +142,6 @@ impl Manager {
137142 self . data . load_full ( kind. clone ( ) , loaded) ;
138143 log:: debug!( "loaded history for {kind}: {len} messages" ) ;
139144
140- self . renormalize_messages ( kind. clone ( ) , clients) ;
141-
142145 self . process_messages ( kind. clone ( ) , clients, buffer_config) ;
143146
144147 return Some ( Event :: Loaded ( kind) ) ;
@@ -212,25 +215,40 @@ impl Manager {
212215 & mut self . filters
213216 }
214217
215- pub fn tick ( & mut self , now : Instant ) -> Vec < BoxFuture < ' static , Message > > {
216- self . data . flush_all ( now)
218+ pub fn tick (
219+ & mut self ,
220+ now : Instant ,
221+ clients : & client:: Map ,
222+ ) -> Vec < BoxFuture < ' static , Message > > {
223+ self . data . flush_all ( now, clients)
217224 }
218225
219226 pub fn close (
220227 & mut self ,
221228 kind : history:: Kind ,
229+ clients : & client:: Map ,
222230 ) -> Option < impl Future < Output = Message > + use < > > {
223231 let history = self . data . map . remove ( & kind) ?;
224232
225- Some ( history. close ( ) . map ( |result| Message :: Closed ( kind, result) ) )
233+ Some (
234+ history
235+ . close ( clients. get_seed ( & kind) )
236+ . map ( |result| Message :: Closed ( kind, result) ) ,
237+ )
226238 }
227239
228- pub fn exit ( & mut self ) -> impl Future < Output = Message > + use < > {
240+ pub fn exit(
241+ & mut self ,
242+ clients : & client:: Map ,
243+ ) -> impl Future < Output = Message > + use<> {
229244 let map = std:: mem:: take ( & mut self . data ) . map ;
245+ let seeds: Vec < Option < history:: Seed > > =
246+ map. keys ( ) . map ( |kind| clients. get_seed ( kind) ) . collect ( ) ;
247+ let seeded_map = map. into_iter ( ) . zip ( seeds) ;
230248
231249 async move {
232- let tasks = map . into_iter ( ) . map ( |( kind, state) | {
233- state. close ( ) . map ( move |result| ( kind, result) )
250+ let tasks = seeded_map . into_iter ( ) . map ( |( ( kind, state) , seed ) | {
251+ state. close ( seed ) . map ( move |result| ( kind, result) )
234252 } ) ;
235253
236254 Message :: Exited ( future:: join_all ( tasks) . await )
@@ -866,37 +884,18 @@ impl Manager {
866884
867885 pub fn renormalize_messages (
868886 & mut self ,
869- kind : history:: Kind ,
887+ kind : & history:: Kind ,
870888 clients : & client:: Map ,
871889 ) {
872- if let Some ( history) = self . data . map . get_mut ( & kind) {
890+ if let Some ( history) = self . data . map . get_mut ( kind)
891+ && let Some ( seed) = clients. get_seed ( kind)
892+ {
873893 let messages = match history {
874894 History :: Full { messages, .. } => messages,
875895 History :: Partial { messages, .. } => messages,
876896 } ;
877897
878- match kind {
879- history:: Kind :: Highlights => {
880- messages. iter_mut ( ) . for_each ( |message| {
881- if let message:: Target :: Highlights { server, .. } =
882- & message. target
883- {
884- let casemapping = clients
885- . get_casemapping_or_default ( Some ( server) ) ;
886-
887- message. renormalize ( casemapping) ;
888- }
889- } ) ;
890- }
891- _ => {
892- let casemapping =
893- clients. get_casemapping_or_default ( kind. server ( ) ) ;
894-
895- messages
896- . iter_mut ( )
897- . for_each ( |message| message. renormalize ( casemapping) ) ;
898- }
899- }
898+ history:: renormalize_messages ( messages, seed) ;
900899 }
901900 }
902901}
@@ -1329,16 +1328,22 @@ impl Data {
13291328 self . map . get_mut ( kind) . and_then ( History :: make_partial)
13301329 }
13311330
1332- fn flush_all ( & mut self , now : Instant ) -> Vec < BoxFuture < ' static , Message > > {
1331+ fn flush_all (
1332+ & mut self ,
1333+ now : Instant ,
1334+ clients : & client:: Map ,
1335+ ) -> Vec < BoxFuture < ' static , Message > > {
13331336 self . map
13341337 . iter_mut ( )
13351338 . filter_map ( |( kind, state) | {
13361339 let kind = kind. clone ( ) ;
13371340
1338- state. flush ( Some ( now) ) . map ( move |task| {
1339- task. map ( move |result| Message :: Flushed ( kind, result) )
1340- . boxed ( )
1341- } )
1341+ state. flush ( Some ( now) , clients. get_seed ( & kind) ) . map (
1342+ move |task| {
1343+ task. map ( move |result| Message :: Flushed ( kind, result) )
1344+ . boxed ( )
1345+ } ,
1346+ )
13421347 } )
13431348 . collect ( )
13441349 }
0 commit comments