[fractal/fractal-next] Move categories modules to better fitting location
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/fractal-next] Move categories modules to better fitting location
- Date: Sat, 12 Jun 2021 14:09:45 +0000 (UTC)
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]