@@ -15,6 +15,7 @@ pub struct Entries {
1515 pub revision : u64 ,
1616
1717 pub sizes : HashMap < PathBufDyn , u64 > ,
18+ pub ranks : HashMap < PathBufDyn , i64 > ,
1819
1920 sorter : FilesSorter ,
2021 filter : Option < Filter > ,
@@ -84,6 +85,31 @@ impl Entries {
8485 }
8586 }
8687
88+ pub fn update_rank ( & mut self , mut ranks : HashMap < PathBufDyn , i64 > ) {
89+ let mut changed = false ;
90+
91+ if self . ranks . is_empty ( ) {
92+ ranks. retain ( |key, rank| * rank != 0 && !key. is_empty ( ) ) ;
93+ ( changed, self . ranks ) = ( !ranks. is_empty ( ) , mem:: take ( & mut ranks) ) ;
94+ }
95+
96+ for ( key, rank) in ranks {
97+ if key. is_empty ( ) {
98+ continue ;
99+ }
100+
101+ changed |= if rank == 0 {
102+ self . ranks . remove ( & key) . is_some ( )
103+ } else {
104+ self . ranks . insert ( key, rank) != Some ( rank)
105+ } ;
106+ }
107+
108+ if changed && self . sorter . by == SortBy :: Custom {
109+ self . revision += 1 ;
110+ }
111+ }
112+
87113 pub fn update_ioerr ( & mut self ) {
88114 self . ticket = FILES_TICKET . next ( ) ;
89115 self . hidden . clear ( ) ;
@@ -219,7 +245,7 @@ impl Entries {
219245 }
220246
221247 self . version = self . revision ;
222- self . sorter . sort ( & mut self . items , & self . sizes ) ;
248+ self . sorter . sort ( & mut self . items , & self . sizes , & self . ranks ) ;
223249 true
224250 }
225251
@@ -277,14 +303,14 @@ impl Entries {
277303 self . hidden = hidden;
278304 if !items. is_empty ( ) {
279305 self . items . extend ( items) ;
280- self . sorter . sort ( & mut self . items , & self . sizes ) ;
306+ self . sorter . sort ( & mut self . items , & self . sizes , & self . ranks ) ;
281307 }
282308 return true ;
283309 }
284310
285311 let it = mem:: take ( & mut self . items ) . into_iter ( ) . chain ( mem:: take ( & mut self . hidden ) ) ;
286312 ( self . hidden , self . items ) = self . split_files ( it) ;
287- self . sorter . sort ( & mut self . items , & self . sizes ) ;
313+ self . sorter . sort ( & mut self . items , & self . sizes , & self . ranks ) ;
288314 true
289315 }
290316
0 commit comments