[fractal] Rename rooms_since to directory_pagination



commit ee4c0ef256682ee12bc013272eeb528527450a3c
Author: Alejandro Domínguez <adomu net-c com>
Date:   Wed Jun 17 04:49:48 2020 +0200

    Rename rooms_since to directory_pagination

 fractal-gtk/src/actions/global.rs        |  1 -
 fractal-gtk/src/app/connect/directory.rs |  5 ++++-
 fractal-gtk/src/appop/directory.rs       | 13 +++++++++----
 fractal-gtk/src/appop/mod.rs             | 26 ++++++++++++++++++++++++--
 fractal-gtk/src/appop/state.rs           |  4 +++-
 5 files changed, 40 insertions(+), 9 deletions(-)
---
diff --git a/fractal-gtk/src/actions/global.rs b/fractal-gtk/src/actions/global.rs
index eaba6d8c..97515c26 100644
--- a/fractal-gtk/src/actions/global.rs
+++ b/fractal-gtk/src/actions/global.rs
@@ -26,7 +26,6 @@ pub enum AppState {
     AccountSettings,
     Directory,
 }
-
 impl<'a> From<&'a glib::Variant> for AppState {
     fn from(v: &glib::Variant) -> AppState {
         v.get::<String>().expect("Invalid back state type").into()
diff --git a/fractal-gtk/src/app/connect/directory.rs b/fractal-gtk/src/app/connect/directory.rs
index c1de8f79..95bea3c3 100644
--- a/fractal-gtk/src/app/connect/directory.rs
+++ b/fractal-gtk/src/app/connect/directory.rs
@@ -7,6 +7,7 @@ use gtk::prelude::*;
 use libhandy::{Column, ColumnExt};
 
 use crate::app::App;
+use crate::appop::RoomSearchPagination;
 
 impl App {
     pub fn connect_directory(&self) {
@@ -118,7 +119,9 @@ impl App {
 
         op = self.op.clone();
         q.connect_activate(move |_| {
-            op.lock().unwrap().search_rooms(None);
+            let mut op = op.lock().unwrap();
+            op.directory_pagination = RoomSearchPagination::Initial;
+            op.search_rooms();
         });
 
         default_matrix_server_radio.connect_toggled(clone!(directory_choice_label, 
default_matrix_server_radio, protocol_combo, other_homeserver_url_entry => move |_| {
diff --git a/fractal-gtk/src/appop/directory.rs b/fractal-gtk/src/appop/directory.rs
index 9f15b7a2..3a74492c 100644
--- a/fractal-gtk/src/appop/directory.rs
+++ b/fractal-gtk/src/appop/directory.rs
@@ -12,6 +12,7 @@ use crate::appop::AppOp;
 use crate::backend::{BKCommand, BKResponse};
 use crate::widgets;
 
+use super::RoomSearchPagination;
 use crate::types::Room;
 use fractal_api::r0::thirdparty::get_supported_protocols::ProtocolInstance;
 
@@ -47,7 +48,7 @@ impl AppOp {
         }
     }
 
-    pub fn search_rooms(&mut self, rooms_since: Option<String>) {
+    pub fn search_rooms(&mut self) {
         let login_data = unwrap_or_unit_return!(self.login_data.clone());
         let other_protocol_radio = self
             .ui
@@ -107,7 +108,7 @@ impl AppOp {
             String::new()
         };
 
-        if rooms_since.is_none() {
+        if !self.directory_pagination.has_more() {
             let directory = self
                 .ui
                 .builder
@@ -135,6 +136,7 @@ impl AppOp {
         }
 
         let search_term = q.get_text().unwrap().to_string();
+        let rooms_since = self.directory_pagination.clone().into();
         let tx = self.backend.clone();
         thread::spawn(move || {
             let query = directory::room_search(
@@ -160,12 +162,15 @@ impl AppOp {
         });
     }
 
+    #[inline]
     pub fn load_more_rooms(&mut self) {
-        self.search_rooms(self.rooms_since.clone());
+        self.search_rooms();
     }
 
     pub fn append_directory_rooms(&mut self, rooms: Vec<Room>, rooms_since: Option<String>) {
-        self.rooms_since = rooms_since;
+        self.directory_pagination = rooms_since
+            .map(RoomSearchPagination::Next)
+            .unwrap_or(RoomSearchPagination::NoMorePages);
 
         let directory = self
             .ui
diff --git a/fractal-gtk/src/appop/mod.rs b/fractal-gtk/src/appop/mod.rs
index 43df8893..19b0ad13 100644
--- a/fractal-gtk/src/appop/mod.rs
+++ b/fractal-gtk/src/appop/mod.rs
@@ -49,6 +49,28 @@ mod user;
 use self::member::SearchType;
 use self::message::TmpMsg;
 
+#[derive(Clone, Debug, PartialEq)]
+pub enum RoomSearchPagination {
+    Initial,
+    Next(String),
+    NoMorePages,
+}
+
+impl From<RoomSearchPagination> for Option<String> {
+    fn from(rooms_pagination: RoomSearchPagination) -> Option<String> {
+        match rooms_pagination {
+            RoomSearchPagination::Next(rooms_since) => Some(rooms_since),
+            _ => None,
+        }
+    }
+}
+
+impl RoomSearchPagination {
+    pub fn has_more(&self) -> bool {
+        *self != RoomSearchPagination::Initial
+    }
+}
+
 #[derive(Clone, Debug)]
 pub struct LoginData {
     pub access_token: AccessToken,
@@ -82,7 +104,7 @@ pub struct AppOp {
 
     pub media_viewer: Rc<RefCell<Option<widgets::MediaViewer>>>,
 
-    pub rooms_since: Option<String>, // This is for directory searches
+    pub directory_pagination: RoomSearchPagination,
     pub state: AppState,
     pub since: Option<String>,
     pub room_back_history: Rc<RefCell<Vec<AppState>>>,
@@ -121,7 +143,7 @@ impl AppOp {
             state: AppState::Login,
             room_back_history: Rc::new(RefCell::new(vec![])),
             roomlist: widgets::RoomList::new(None, None),
-            rooms_since: None,
+            directory_pagination: RoomSearchPagination::Initial,
             unread_rooms: 0,
             since: None,
             unsent_messages: HashMap::new(),
diff --git a/fractal-gtk/src/appop/state.rs b/fractal-gtk/src/appop/state.rs
index 7853c18c..4fbd2045 100644
--- a/fractal-gtk/src/appop/state.rs
+++ b/fractal-gtk/src/appop/state.rs
@@ -2,6 +2,7 @@ use gtk;
 use gtk::prelude::*;
 use libhandy::LeafletExt;
 
+use super::RoomSearchPagination;
 use crate::actions::AppState;
 use crate::appop::AppOp;
 
@@ -78,7 +79,8 @@ impl AppOp {
         }
 
         if let AppState::Directory = self.state {
-            self.search_rooms(None);
+            self.directory_pagination = RoomSearchPagination::Initial;
+            self.search_rooms();
         }
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]