Pārlūkot izejas kodu

wallet: chatview correct loading of pages on demand

darkfi 2 gadi atpakaļ
vecāks
revīzija
03ed184991
1 mainītis faili ar 15 papildinājumiem un 4 dzēšanām
  1. 15 4
      bin/darkwallet/src/ui/chatview.rs

+ 15 - 4
bin/darkwallet/src/ui/chatview.rs

@@ -476,11 +476,11 @@ impl ChatView {
     }
 
     async fn populate(&self) {
-        let iter = self.tree.iter();
+        let iter = self.tree.iter().rev();
         self.load_n_pages(iter, PRELOAD_PAGES).await;
     }
 
-    /// Load an extra page
+    /// Load extra pages
     async fn preload_pages(&self) -> usize {
         // Get last page
         let last_page = self.pages2.lock().unwrap().last().unwrap().clone();
@@ -489,7 +489,8 @@ impl ChatView {
 
         // iterate from there
         let key = last_timest.to_be_bytes();
-        let iter = self.tree.range(..key);
+        debug!(target: "ui::chatview", "preloading from {key:?}");
+        let iter = self.tree.range(..key).rev();
 
         self.load_n_pages(iter, PRELOAD_PAGES).await
     }
@@ -508,7 +509,7 @@ impl ChatView {
             let key_bytes: [u8; 4] = k.as_ref().try_into().unwrap();
             let timest = Timestamp::from_be_bytes(key_bytes);
             let chatmsg: ChatMsg = deserialize(&v).unwrap();
-            //println!("{k:?} {chatmsg:?}");
+            debug!(target: "ui::chatview", "{k:?} {chatmsg:?}");
 
             let timestr = timest.to_string();
             // left pad with zeros
@@ -525,12 +526,22 @@ impl ChatView {
                 let page = Page2::new(msgs, &self.render_api).await;
 
                 self.pages2.lock().unwrap().push(page);
+                pages_len += 1;
 
                 if pages_len >= n {
                     break
                 }
             }
         }
+
+        // Any remaining messages added to a short page
+        if !msgs.is_empty() {
+            let page = Page2::new(msgs, &self.render_api).await;
+
+            self.pages2.lock().unwrap().push(page);
+            pages_len += 1;
+        }
+
         debug!(target: "ui::chatview", "populated {} pages", pages_len);
 
         pages_len