[fractal/fractal-next] sidebar: Rename Categories to ItemList and cleanup



commit f69e6562a518762649a36b3c407cf33e91c92f41
Author: Julian Sparber <julian sparber net>
Date:   Thu Jun 3 19:54:38 2021 +0200

    sidebar: Rename Categories to ItemList and cleanup

 data/resources/ui/session.ui                       |  2 +-
 src/meson.build                                    |  2 +-
 src/session/mod.rs                                 | 31 +++++++++-------------
 .../sidebar/{categories.rs => item_list.rs}        | 22 +++++++--------
 src/session/sidebar/mod.rs                         |  4 +--
 src/session/sidebar/sidebar.rs                     | 25 +++++++++--------
 6 files changed, 41 insertions(+), 45 deletions(-)
---
diff --git a/data/resources/ui/session.ui b/data/resources/ui/session.ui
index 1a2a052c..590cf2cc 100644
--- a/data/resources/ui/session.ui
+++ b/data/resources/ui/session.ui
@@ -49,7 +49,7 @@
                 <child>
                   <object class="Sidebar">
                     <property name="compact" bind-source="content" bind-property="folded" 
bind-flags="sync-create"/>
-                    <property name="categories" bind-source="Session" bind-property="categories" 
bind-flags="sync-create"/>
+                    <property name="room-list" bind-source="Session" bind-property="room-list" 
bind-flags="sync-create"/>
                     <property name="selected-room" bind-source="Session" bind-property="selected-room" 
bind-flags="sync-create | bidirectional"/>
                   </object>
                 </child>
diff --git a/src/meson.build b/src/meson.build
index 91ff1a75..d0734274 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -55,7 +55,7 @@ sources = files(
   'session/room/room_type.rs',
   'session/room_list.rs',
   'session/room/timeline.rs',
-  'session/sidebar/categories.rs',
+  'session/sidebar/item_list.rs',
   'session/sidebar/category.rs',
   'session/sidebar/category_row.rs',
   'session/sidebar/mod.rs',
diff --git a/src/session/mod.rs b/src/session/mod.rs
index 85ea3300..470a5006 100644
--- a/src/session/mod.rs
+++ b/src/session/mod.rs
@@ -10,7 +10,6 @@ pub use self::avatar::Avatar;
 use self::content::Content;
 pub use self::room::Room;
 use self::room_list::RoomList;
-use self::sidebar::Categories;
 use self::sidebar::Sidebar;
 pub use self::user::User;
 
@@ -57,7 +56,6 @@ mod imp {
         pub error: RefCell<Option<matrix_sdk::Error>>,
         pub client: OnceCell<Client>,
         pub room_list: OnceCell<RoomList>,
-        pub categories: Categories,
         pub user: OnceCell<User>,
         pub selected_room: RefCell<Option<Room>>,
         pub is_ready: OnceCell<bool>,
@@ -87,10 +85,10 @@ mod imp {
             static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
                 vec![
                     glib::ParamSpec::new_object(
-                        "categories",
-                        "Categories",
-                        "A list of rooms grouped into categories",
-                        Categories::static_type(),
+                        "room-list",
+                        "Room List",
+                        "The list of rooms",
+                        RoomList::static_type(),
                         glib::ParamFlags::READABLE,
                     ),
                     glib::ParamSpec::new_object(
@@ -131,7 +129,7 @@ mod imp {
 
         fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
             match pspec.name() {
-                "categories" => self.categories.to_value(),
+                "room-list" => obj.room_list().to_value(),
                 "selected-room" => obj.selected_room().to_value(),
                 "user" => obj.user().to_value(),
                 _ => unimplemented!(),
@@ -277,11 +275,7 @@ impl Session {
                     secret::store_session(session).unwrap();
                 }
 
-                let room_list = RoomList::new(self);
-                priv_.categories.set_room_list(&room_list);
-                room_list.load();
-                priv_.room_list.set(room_list).unwrap();
-
+                self.room_list().load();
                 self.sync();
             }
             Err(error) => {
@@ -336,6 +330,11 @@ impl Session {
         priv_.is_ready.get().copied().unwrap_or_default()
     }
 
+    pub fn room_list(&self) -> &RoomList {
+        let priv_ = &imp::Session::from_instance(self);
+        priv_.room_list.get_or_init(|| RoomList::new(self))
+    }
+
     pub fn user(&self) -> &User {
         let priv_ = &imp::Session::from_instance(self);
         priv_.user.get().unwrap()
@@ -391,12 +390,6 @@ impl Session {
     }
 
     fn handle_sync_response(&self, response: SyncResponse) {
-        let priv_ = imp::Session::from_instance(self);
-
-        priv_
-            .room_list
-            .get()
-            .unwrap()
-            .handle_response_rooms(response.rooms);
+        self.room_list().handle_response_rooms(response.rooms);
     }
 }
diff --git a/src/session/sidebar/categories.rs b/src/session/sidebar/item_list.rs
similarity index 77%
rename from src/session/sidebar/categories.rs
rename to src/session/sidebar/item_list.rs
index 1da6a012..0cd4a89d 100644
--- a/src/session/sidebar/categories.rs
+++ b/src/session/sidebar/item_list.rs
@@ -8,21 +8,21 @@ mod imp {
     use super::*;
 
     #[derive(Debug, Default)]
-    pub struct Categories {
+    pub struct ItemList {
         pub list: OnceCell<[Category; 5]>,
     }
 
     #[glib::object_subclass]
-    impl ObjectSubclass for Categories {
-        const NAME: &'static str = "Categories";
-        type Type = super::Categories;
+    impl ObjectSubclass for ItemList {
+        const NAME: &'static str = "ItemList";
+        type Type = super::ItemList;
         type ParentType = glib::Object;
         type Interfaces = (gio::ListModel,);
     }
 
-    impl ObjectImpl for Categories {}
+    impl ObjectImpl for ItemList {}
 
-    impl ListModelImpl for Categories {
+    impl ListModelImpl for ItemList {
         fn item_type(&self, _list_model: &Self::Type) -> glib::Type {
             Category::static_type()
         }
@@ -40,23 +40,23 @@ mod imp {
 }
 
 glib::wrapper! {
-    pub struct Categories(ObjectSubclass<imp::Categories>)
+    pub struct ItemList(ObjectSubclass<imp::ItemList>)
         @implements gio::ListModel;
 }
 
-impl Default for Categories {
+impl Default for ItemList {
     fn default() -> Self {
         Self::new()
     }
 }
 
-impl Categories {
+impl ItemList {
     pub fn new() -> Self {
-        glib::Object::new(&[]).expect("Failed to create Categories")
+        glib::Object::new(&[]).expect("Failed to create ItemList")
     }
 
     pub fn set_room_list(&self, room_list: &RoomList) {
-        let priv_ = imp::Categories::from_instance(&self);
+        let priv_ = imp::ItemList::from_instance(&self);
 
         priv_
             .list
diff --git a/src/session/sidebar/mod.rs b/src/session/sidebar/mod.rs
index b6ab3c27..0b298088 100644
--- a/src/session/sidebar/mod.rs
+++ b/src/session/sidebar/mod.rs
@@ -1,14 +1,14 @@
-mod categories;
 mod category;
 mod category_row;
+mod item_list;
 mod room_row;
 mod row;
 mod selection;
 mod sidebar;
 
-pub use self::categories::Categories;
 pub use self::category::Category;
 use self::category_row::CategoryRow;
+pub use self::item_list::ItemList;
 use self::room_row::RoomRow;
 use self::row::Row;
 use self::selection::Selection;
diff --git a/src/session/sidebar/sidebar.rs b/src/session/sidebar/sidebar.rs
index 2d579e09..40d858dd 100644
--- a/src/session/sidebar/sidebar.rs
+++ b/src/session/sidebar/sidebar.rs
@@ -3,7 +3,8 @@ use gtk::{gio, glib, prelude::*, subclass::prelude::*, CompositeTemplate};
 
 use crate::session::{
     room::Room,
-    sidebar::{Categories, Category, RoomRow, Row, Selection},
+    sidebar::{Category, ItemList, RoomRow, Row, Selection},
+    RoomList,
 };
 
 mod imp {
@@ -54,10 +55,10 @@ mod imp {
                         glib::ParamFlags::READWRITE,
                     ),
                     glib::ParamSpec::new_object(
-                        "categories",
-                        "Categories",
-                        "A list of rooms grouped into categories",
-                        Categories::static_type(),
+                        "room-list",
+                        "Room List",
+                        "The list of rooms",
+                        RoomList::static_type(),
                         glib::ParamFlags::WRITABLE,
                     ),
                     glib::ParamSpec::new_object(
@@ -85,9 +86,9 @@ mod imp {
                     let compact = value.get().unwrap();
                     self.compact.set(compact);
                 }
-                "categories" => {
-                    let categories = value.get().unwrap();
-                    obj.set_categories(categories);
+                "room-list" => {
+                    let room_list = value.get().unwrap();
+                    obj.set_room_list(room_list);
                 }
                 "selected-room" => {
                     let selected_room = value.get().unwrap();
@@ -151,12 +152,14 @@ impl Sidebar {
         priv_.selected_room.borrow().clone()
     }
 
-    pub fn set_categories(&self, categories: Option<Categories>) {
+    pub fn set_room_list(&self, room_list: Option<RoomList>) {
         let priv_ = imp::Sidebar::from_instance(self);
 
-        if let Some(categories) = categories {
+        if let Some(room_list) = room_list {
             // TODO: hide empty categories
-            let tree_model = gtk::TreeListModel::new(&categories, false, true, |item| {
+            let item_list = ItemList::new();
+            item_list.set_room_list(&room_list);
+            let tree_model = gtk::TreeListModel::new(&item_list, false, true, |item| {
                 item.clone().downcast::<gio::ListModel>().ok()
             });
 


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