[fractal/fractal-next] Move categories modules to better fitting location



commit 8e789c8bf56c15683a740276b7baf12c95287ce9
Author: Julian Sparber <julian sparber net>
Date:   Thu Jun 3 18:13:29 2021 +0200

    Move categories modules to better fitting location
    
    This also renames CategoryType to RoomType

 src/meson.build                                   |  7 ++-
 src/session/categories/category_type.rs           | 32 -------------
 src/session/categories/mod.rs                     |  7 ---
 src/session/content/content.rs                    |  8 +++-
 src/session/content/invite.rs                     |  4 +-
 src/session/content/room_history.rs               |  8 ++--
 src/session/mod.rs                                |  3 +-
 src/session/room/mod.rs                           |  2 +
 src/session/room/room.rs                          | 57 +++++++++++------------
 src/session/room/room_type.rs                     | 32 +++++++++++++
 src/session/{categories => sidebar}/categories.rs | 15 +++---
 src/session/{categories => sidebar}/category.rs   | 15 +++---
 src/session/sidebar/category_row.rs               |  2 +-
 src/session/sidebar/mod.rs                        |  4 ++
 src/session/sidebar/row.rs                        |  6 ++-
 src/session/sidebar/sidebar.rs                    |  3 +-
 16 files changed, 102 insertions(+), 103 deletions(-)
---
diff --git a/src/meson.build b/src/meson.build
index 779b0324..91ff1a75 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -38,10 +38,6 @@ sources = files(
   'session/event_source_dialog.rs',
   'session/user.rs',
   'session/mod.rs',
-  'session/categories/categories.rs',
-  'session/categories/category.rs',
-  'session/categories/category_type.rs',
-  'session/categories/mod.rs',
   'session/content/content.rs',
   'session/content/divider_row.rs',
   'session/content/item_row.rs',
@@ -56,8 +52,11 @@ sources = files(
   'session/room/item.rs',
   'session/room/mod.rs',
   'session/room/room.rs',
+  'session/room/room_type.rs',
   'session/room_list.rs',
   'session/room/timeline.rs',
+  'session/sidebar/categories.rs',
+  'session/sidebar/category.rs',
   'session/sidebar/category_row.rs',
   'session/sidebar/mod.rs',
   'session/sidebar/row.rs',
diff --git a/src/session/content/content.rs b/src/session/content/content.rs
index e6dfc5c0..d7dd8166 100644
--- a/src/session/content/content.rs
+++ b/src/session/content/content.rs
@@ -1,4 +1,8 @@
-use crate::session::{categories::CategoryType, content::Invite, content::RoomHistory, room::Room};
+use crate::session::{
+    content::Invite,
+    content::RoomHistory,
+    room::{Room, RoomType},
+};
 use adw::subclass::prelude::*;
 use gtk::{gio, glib, glib::clone, prelude::*, subclass::prelude::*, CompositeTemplate};
 
@@ -161,7 +165,7 @@ impl Content {
     fn set_visible_child(&self, room: &Room) {
         let priv_ = imp::Content::from_instance(self);
 
-        if room.category() == CategoryType::Invited {
+        if room.category() == RoomType::Invited {
             priv_.stack.set_visible_child(&*priv_.invite);
         } else {
             priv_.stack.set_visible_child(&*priv_.room_history);
diff --git a/src/session/content/invite.rs b/src/session/content/invite.rs
index 2d967d38..14e490c5 100644
--- a/src/session/content/invite.rs
+++ b/src/session/content/invite.rs
@@ -1,6 +1,6 @@
 use crate::{
     components::{Avatar, LabelWithWidgets, Pill, SpinnerButton},
-    session::{categories::CategoryType, room::Room},
+    session::room::{Room, RoomType},
 };
 use adw::subclass::prelude::*;
 use gtk::{glib, glib::clone, prelude::*, subclass::prelude::*, CompositeTemplate};
@@ -170,7 +170,7 @@ impl Invite {
             let handler_id = room.connect_notify_local(
                 Some("category"),
                 clone!(@weak self as obj => move |room, _| {
-                        if room.category() != CategoryType::Invited {
+                        if room.category() != RoomType::Invited {
                                 let priv_ = imp::Invite::from_instance(&obj);
                                 priv_.reject_requests.borrow_mut().remove(&room);
                                 priv_.accept_requests.borrow_mut().remove(&room);
diff --git a/src/session/content/room_history.rs b/src/session/content/room_history.rs
index 2b9ff074..d6c902c3 100644
--- a/src/session/content/room_history.rs
+++ b/src/session/content/room_history.rs
@@ -1,6 +1,4 @@
-use crate::session::{
-    categories::CategoryType, content::ItemRow, content::MarkdownPopover, room::Room,
-};
+use crate::session::{content::ItemRow, content::MarkdownPopover, room::Room, room::RoomType};
 use adw::subclass::prelude::*;
 use gtk::{
     gdk, glib, glib::clone, glib::signal::Inhibit, prelude::*, subclass::prelude::*,
@@ -261,7 +259,7 @@ impl RoomHistory {
         let priv_ = imp::RoomHistory::from_instance(self);
 
         if let Some(room) = &*priv_.room.borrow() {
-            room.set_category(CategoryType::Left);
+            room.set_category(RoomType::Left);
         }
     }
 
@@ -269,7 +267,7 @@ impl RoomHistory {
         let priv_ = imp::RoomHistory::from_instance(self);
 
         if let Some(room) = &*priv_.room.borrow() {
-            if room.category() == CategoryType::Left {
+            if room.category() == RoomType::Left {
                 self.action_set_enabled("room-history.leave", false);
                 priv_.room_menu.hide();
             } else {
diff --git a/src/session/mod.rs b/src/session/mod.rs
index 72c25473..85ea3300 100644
--- a/src/session/mod.rs
+++ b/src/session/mod.rs
@@ -1,5 +1,4 @@
 mod avatar;
-mod categories;
 mod content;
 mod event_source_dialog;
 mod room;
@@ -8,10 +7,10 @@ mod sidebar;
 mod user;
 
 pub use self::avatar::Avatar;
-use self::categories::Categories;
 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;
 
diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs
index 1195bfed..146b1214 100644
--- a/src/session/room/mod.rs
+++ b/src/session/room/mod.rs
@@ -2,6 +2,7 @@ mod event;
 mod highlight_flags;
 mod item;
 mod room;
+mod room_type;
 mod timeline;
 
 pub use self::event::Event;
@@ -9,4 +10,5 @@ pub use self::highlight_flags::HighlightFlags;
 pub use self::item::Item;
 pub use self::item::ItemType;
 pub use self::room::Room;
+pub use self::room_type::RoomType;
 pub use self::timeline::Timeline;
diff --git a/src/session/room/room.rs b/src/session/room/room.rs
index 05d2da4e..9d9b3a89 100644
--- a/src/session/room/room.rs
+++ b/src/session/room/room.rs
@@ -27,8 +27,7 @@ use std::convert::TryFrom;
 use crate::components::{LabelWithWidgets, Pill};
 use crate::event_from_sync_event;
 use crate::session::{
-    categories::CategoryType,
-    room::{HighlightFlags, Timeline},
+    room::{HighlightFlags, RoomType, Timeline},
     Avatar, Session, User,
 };
 use crate::utils::do_async;
@@ -48,7 +47,7 @@ mod imp {
         pub session: OnceCell<Session>,
         pub name: RefCell<Option<String>>,
         pub avatar: OnceCell<Avatar>,
-        pub category: Cell<CategoryType>,
+        pub category: Cell<RoomType>,
         pub timeline: OnceCell<Timeline>,
         pub room_members: RefCell<HashMap<UserId, User>>,
         /// The user who send the invite to this room. This is only set when this room is an invitiation.
@@ -129,8 +128,8 @@ mod imp {
                         "category",
                         "Category",
                         "The category of this room",
-                        CategoryType::static_type(),
-                        CategoryType::default() as i32,
+                        RoomType::static_type(),
+                        RoomType::default() as i32,
                         glib::ParamFlags::READWRITE,
                     ),
                     glib::ParamSpec::new_string(
@@ -257,12 +256,12 @@ impl Room {
         self.load_category();
     }
 
-    pub fn category(&self) -> CategoryType {
+    pub fn category(&self) -> RoomType {
         let priv_ = imp::Room::from_instance(self);
         priv_.category.get()
     }
 
-    fn set_category_internal(&self, category: CategoryType) {
+    fn set_category_internal(&self, category: RoomType) {
         let priv_ = imp::Room::from_instance(self);
 
         if self.category() == category {
@@ -277,7 +276,7 @@ impl Room {
     ///
     /// This makes the necessary to propagate the category to the homeserver.
     /// Note: Rooms can't be moved to the invite category.
-    pub fn set_category(&self, category: CategoryType) {
+    pub fn set_category(&self, category: RoomType) {
         let matrix_room = self.matrix_room();
         let previous_category = self.category();
 
@@ -285,7 +284,7 @@ impl Room {
             return;
         }
 
-        if category == CategoryType::Invited {
+        if category == RoomType::Invited {
             warn!("Rooms can't be moved to the invite Category");
             return;
         }
@@ -296,53 +295,53 @@ impl Room {
                 match matrix_room {
                     MatrixRoom::Invited(room) => {
                         match category {
-                            CategoryType::Invited => Ok(()),
-                            CategoryType::Favorite => {
+                            RoomType::Invited => Ok(()),
+                            RoomType::Favorite => {
                                 room.accept_invitation().await
                                 // TODO: set favorite tag
                             }
-                            CategoryType::Normal => room.accept_invitation().await,
-                            CategoryType::LowPriority => {
+                            RoomType::Normal => room.accept_invitation().await,
+                            RoomType::LowPriority => {
                                 room.accept_invitation().await
                                 // TODO: set low priority tag
                             }
-                            CategoryType::Left => room.reject_invitation().await,
+                            RoomType::Left => room.reject_invitation().await,
                         }
                     }
                     MatrixRoom::Joined(room) => {
                         match category {
-                            CategoryType::Invited => Ok(()),
-                            CategoryType::Favorite => {
+                            RoomType::Invited => Ok(()),
+                            RoomType::Favorite => {
                                 // TODO: set favorite tag
                                 Ok(())
                             }
-                            CategoryType::Normal => {
+                            RoomType::Normal => {
                                 // TODO: remove tags
                                 Ok(())
                             }
-                            CategoryType::LowPriority => {
+                            RoomType::LowPriority => {
                                 // TODO: set low priority tag
                                 Ok(())
                             }
-                            CategoryType::Left => room.leave().await,
+                            RoomType::Left => room.leave().await,
                         }
                     }
                     MatrixRoom::Left(room) => {
                         match category {
-                            CategoryType::Invited => Ok(()),
-                            CategoryType::Favorite => {
+                            RoomType::Invited => Ok(()),
+                            RoomType::Favorite => {
                                 room.join().await
                                 // TODO: set favorite tag
                             }
-                            CategoryType::Normal => {
+                            RoomType::Normal => {
                                 room.join().await
                                 // TODO: remove tags
                             }
-                            CategoryType::LowPriority => {
+                            RoomType::LowPriority => {
                                 room.join().await
                                 // TODO: set low priority tag
                             }
-                            CategoryType::Left => Ok(()),
+                            RoomType::Left => Ok(()),
                         }
                     }
                 }
@@ -386,13 +385,13 @@ impl Room {
                     glib::PRIORITY_DEFAULT_IDLE,
                     async move { matrix_room.tags().await },
                     clone!(@weak self as obj => move |tags_result| async move {
-                        let mut category = CategoryType::Normal;
+                        let mut category = RoomType::Normal;
 
                         if let Ok(Some(tags)) = tags_result {
                             if tags.get(&TagName::Favorite).is_some() {
-                                category = CategoryType::Favorite;
+                                category = RoomType::Favorite;
                             } else if tags.get(&TagName::LowPriority).is_some() {
-                                category = CategoryType::LowPriority;
+                                category = RoomType::LowPriority;
                             }
                         }
 
@@ -400,8 +399,8 @@ impl Room {
                     }),
                 );
             }
-            MatrixRoom::Invited(_) => self.set_category_internal(CategoryType::Invited),
-            MatrixRoom::Left(_) => self.set_category_internal(CategoryType::Left),
+            MatrixRoom::Invited(_) => self.set_category_internal(RoomType::Invited),
+            MatrixRoom::Left(_) => self.set_category_internal(RoomType::Left),
         };
     }
 
diff --git a/src/session/room/room_type.rs b/src/session/room/room_type.rs
new file mode 100644
index 00000000..8f8dd92b
--- /dev/null
+++ b/src/session/room/room_type.rs
@@ -0,0 +1,32 @@
+use gettextrs::gettext;
+use gtk::glib;
+
+// TODO: do we also want the categorie `People` and a custom categorie support?
+#[derive(Debug, Hash, Eq, PartialEq, Clone, Copy, glib::GEnum)]
+#[repr(u32)]
+#[genum(type_name = "RoomType")]
+pub enum RoomType {
+    Invited = 0,
+    Favorite = 1,
+    Normal = 2,
+    LowPriority = 3,
+    Left = 4,
+}
+
+impl Default for RoomType {
+    fn default() -> Self {
+        RoomType::Normal
+    }
+}
+
+impl ToString for RoomType {
+    fn to_string(&self) -> String {
+        match self {
+            RoomType::Invited => gettext("Invited"),
+            RoomType::Favorite => gettext("Favorite"),
+            RoomType::Normal => gettext("Rooms"),
+            RoomType::LowPriority => gettext("Low Priority"),
+            RoomType::Left => gettext("Historical"),
+        }
+    }
+}
diff --git a/src/session/categories/categories.rs b/src/session/sidebar/categories.rs
similarity index 80%
rename from src/session/categories/categories.rs
rename to src/session/sidebar/categories.rs
index a77a2c8c..1da6a012 100644
--- a/src/session/categories/categories.rs
+++ b/src/session/sidebar/categories.rs
@@ -1,9 +1,6 @@
 use gtk::{gio, glib, prelude::*, subclass::prelude::*};
 
-use crate::session::{
-    categories::{Category, CategoryType},
-    room_list::RoomList,
-};
+use crate::session::{room::RoomType, room_list::RoomList, sidebar::Category};
 
 mod imp {
     use once_cell::unsync::OnceCell;
@@ -64,11 +61,11 @@ impl Categories {
         priv_
             .list
             .set([
-                Category::new(CategoryType::Invited, room_list),
-                Category::new(CategoryType::Favorite, room_list),
-                Category::new(CategoryType::Normal, room_list),
-                Category::new(CategoryType::LowPriority, room_list),
-                Category::new(CategoryType::Left, room_list),
+                Category::new(RoomType::Invited, room_list),
+                Category::new(RoomType::Favorite, room_list),
+                Category::new(RoomType::Normal, room_list),
+                Category::new(RoomType::LowPriority, room_list),
+                Category::new(RoomType::Left, room_list),
             ])
             .unwrap();
 
diff --git a/src/session/categories/category.rs b/src/session/sidebar/category.rs
similarity index 92%
rename from src/session/categories/category.rs
rename to src/session/sidebar/category.rs
index 738e60d1..4c0d6eb3 100644
--- a/src/session/categories/category.rs
+++ b/src/session/sidebar/category.rs
@@ -1,6 +1,9 @@
 use gtk::{gio, glib, glib::clone, prelude::*, subclass::prelude::*};
 
-use crate::session::{categories::CategoryType, room::Room, room_list::RoomList};
+use crate::session::{
+    room::{Room, RoomType},
+    room_list::RoomList,
+};
 
 mod imp {
     use once_cell::unsync::OnceCell;
@@ -11,7 +14,7 @@ mod imp {
     #[derive(Debug, Default)]
     pub struct Category {
         pub model: OnceCell<gtk::FilterListModel>,
-        pub type_: Cell<CategoryType>,
+        pub type_: Cell<RoomType>,
     }
 
     #[glib::object_subclass]
@@ -31,8 +34,8 @@ mod imp {
                         "type",
                         "Type",
                         "The type of this category",
-                        CategoryType::static_type(),
-                        CategoryType::default() as i32,
+                        RoomType::static_type(),
+                        RoomType::default() as i32,
                         glib::ParamFlags::READWRITE | glib::ParamFlags::CONSTRUCT_ONLY,
                     ),
                     glib::ParamSpec::new_string(
@@ -104,11 +107,11 @@ glib::wrapper! {
 }
 
 impl Category {
-    pub fn new(type_: CategoryType, model: &RoomList) -> Self {
+    pub fn new(type_: RoomType, model: &RoomList) -> Self {
         glib::Object::new(&[("type", &type_), ("model", model)]).expect("Failed to create Category")
     }
 
-    pub fn type_(&self) -> CategoryType {
+    pub fn type_(&self) -> RoomType {
         let priv_ = imp::Category::from_instance(self);
         priv_.type_.get()
     }
diff --git a/src/session/sidebar/category_row.rs b/src/session/sidebar/category_row.rs
index 4706776e..c7953a85 100644
--- a/src/session/sidebar/category_row.rs
+++ b/src/session/sidebar/category_row.rs
@@ -4,7 +4,7 @@ use gtk::subclass::prelude::*;
 use gtk::{self, prelude::*};
 use gtk::{glib, CompositeTemplate};
 
-use crate::session::categories::Category;
+use crate::session::sidebar::Category;
 
 mod imp {
     use super::*;
diff --git a/src/session/sidebar/mod.rs b/src/session/sidebar/mod.rs
index 705d8f32..b6ab3c27 100644
--- a/src/session/sidebar/mod.rs
+++ b/src/session/sidebar/mod.rs
@@ -1,9 +1,13 @@
+mod categories;
+mod category;
 mod category_row;
 mod room_row;
 mod row;
 mod selection;
 mod sidebar;
 
+pub use self::categories::Categories;
+pub use self::category::Category;
 use self::category_row::CategoryRow;
 use self::room_row::RoomRow;
 use self::row::Row;
diff --git a/src/session/sidebar/row.rs b/src/session/sidebar/row.rs
index 3be2ffe9..3a4629b5 100644
--- a/src/session/sidebar/row.rs
+++ b/src/session/sidebar/row.rs
@@ -1,8 +1,10 @@
 use adw::{prelude::*, subclass::prelude::*};
 use gtk::{glib, prelude::*, subclass::prelude::*};
 
-use crate::session::sidebar::{CategoryRow, RoomRow};
-use crate::session::{categories::Category, room::Room};
+use crate::session::{
+    room::Room,
+    sidebar::{Category, CategoryRow, RoomRow},
+};
 
 mod imp {
     use super::*;
diff --git a/src/session/sidebar/sidebar.rs b/src/session/sidebar/sidebar.rs
index c34532c5..2d579e09 100644
--- a/src/session/sidebar/sidebar.rs
+++ b/src/session/sidebar/sidebar.rs
@@ -2,9 +2,8 @@ use adw::subclass::prelude::BinImpl;
 use gtk::{gio, glib, prelude::*, subclass::prelude::*, CompositeTemplate};
 
 use crate::session::{
-    categories::{Categories, Category},
     room::Room,
-    sidebar::{RoomRow, Row, Selection},
+    sidebar::{Categories, Category, RoomRow, Row, Selection},
 };
 
 mod imp {


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