[fractal] room: Send all category changes to the server
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] room: Send all category changes to the server
- Date: Thu, 19 May 2022 09:36:43 +0000 (UTC)
commit f5da9ca917512fda6c846c9bc147becf5b176b4d
Author: Julian Sparber <julian sparber net>
Date: Fri May 13 12:58:31 2022 +0200
room: Send all category changes to the server
src/session/room/mod.rs | 111 ++++++++++++++++++++++++++++++++++--------------
1 file changed, 80 insertions(+), 31 deletions(-)
---
diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs
index b61758957..412af38df 100644
--- a/src/session/room/mod.rs
+++ b/src/session/room/mod.rs
@@ -528,45 +528,76 @@ impl Room {
let handle = spawn_tokio!(async move {
match matrix_room {
MatrixRoom::Invited(room) => match category {
- RoomType::Invited => Ok(()),
+ RoomType::Invited => {}
RoomType::Favorite => {
- room.accept_invitation().await
- // TODO: set favorite tag
+ if let Some(tags) = room.tags().await? {
+ if !tags.contains_key(&TagName::Favorite) {
+ room.set_tag(TagName::Favorite, TagInfo::new()).await?;
+ }
+ if tags.contains_key(&TagName::LowPriority) {
+ room.remove_tag(TagName::LowPriority).await?;
+ }
+ }
+ room.accept_invitation().await?;
}
RoomType::Normal => {
- room.accept_invitation().await
- // TODO: remove tags
+ if let Some(tags) = room.tags().await? {
+ if tags.contains_key(&TagName::Favorite) {
+ room.remove_tag(TagName::Favorite).await?;
+ }
+ if tags.contains_key(&TagName::LowPriority) {
+ room.remove_tag(TagName::LowPriority).await?;
+ }
+ }
+
+ if room.is_direct() {
+ room.set_is_direct(false).await?;
+ }
+
+ room.accept_invitation().await?;
}
RoomType::LowPriority => {
- room.accept_invitation().await
- // TODO: set low priority tag
+ if let Some(tags) = room.tags().await? {
+ if tags.contains_key(&TagName::Favorite) {
+ room.remove_tag(TagName::Favorite).await?;
+ }
+ if !tags.contains_key(&TagName::LowPriority) {
+ room.set_tag(TagName::LowPriority, TagInfo::new()).await?;
+ }
+ }
+ room.accept_invitation().await?;
}
- RoomType::Left => room.reject_invitation().await,
+ RoomType::Left => room.reject_invitation().await?,
RoomType::Outdated => unimplemented!(),
RoomType::Space => unimplemented!(),
RoomType::Direct => {
if !room.is_direct() {
- // TODO: mark as direct by adding it to account data
+ room.set_is_direct(true).await?;
}
- room.accept_invitation().await?;
+ if let Some(tags) = room.tags().await? {
+ if tags.contains_key(&TagName::Favorite) {
+ room.remove_tag(TagName::Favorite).await?;
+ }
+ if tags.contains_key(&TagName::LowPriority) {
+ room.remove_tag(TagName::LowPriority).await?;
+ }
+ }
- Ok(())
+ room.accept_invitation().await?;
}
},
MatrixRoom::Joined(room) => match category {
- RoomType::Invited => Ok(()),
+ RoomType::Invited => {}
RoomType::Favorite => {
room.set_tag(TagName::Favorite, TagInfo::new()).await?;
if previous_category == RoomType::LowPriority {
room.remove_tag(TagName::LowPriority).await?;
}
- Ok(())
}
RoomType::Normal => {
if room.is_direct() {
- // TODO: remove the room from the list of direct
- // rooms via the account data
+ room.set_is_direct(false).await?;
}
match previous_category {
RoomType::Favorite => {
@@ -577,21 +608,19 @@ impl Room {
}
_ => {}
}
- Ok(())
}
RoomType::LowPriority => {
room.set_tag(TagName::LowPriority, TagInfo::new()).await?;
if previous_category == RoomType::Favorite {
room.remove_tag(TagName::Favorite).await?;
}
- Ok(())
}
- RoomType::Left => room.leave().await,
+ RoomType::Left => room.leave().await?,
RoomType::Outdated => unimplemented!(),
RoomType::Space => unimplemented!(),
RoomType::Direct => {
if !room.is_direct() {
- // TODO: Mark as direct by adding it to account data
+ room.set_is_direct(true).await?;
}
if let Some(tags) = room.tags().await? {
@@ -602,30 +631,49 @@ impl Room {
room.remove_tag(TagName::Favorite).await?;
}
}
-
- Ok(())
}
},
MatrixRoom::Left(room) => match category {
- RoomType::Invited => Ok(()),
+ RoomType::Invited => {}
RoomType::Favorite => {
- room.join().await
- // TODO: set favorite tag
+ if let Some(tags) = room.tags().await? {
+ if !tags.contains_key(&TagName::Favorite) {
+ room.set_tag(TagName::Favorite, TagInfo::new()).await?;
+ }
+ if tags.contains_key(&TagName::LowPriority) {
+ room.remove_tag(TagName::LowPriority).await?;
+ }
+ }
+ room.join().await?;
}
RoomType::Normal => {
- room.join().await
- // TODO: remove tags
+ if let Some(tags) = room.tags().await? {
+ if tags.contains_key(&TagName::Favorite) {
+ room.remove_tag(TagName::Favorite).await?;
+ }
+ if tags.contains_key(&TagName::LowPriority) {
+ room.remove_tag(TagName::LowPriority).await?;
+ }
+ }
+ room.join().await?;
}
RoomType::LowPriority => {
- room.join().await
- // TODO: set low priority tag
+ if let Some(tags) = room.tags().await? {
+ if tags.contains_key(&TagName::Favorite) {
+ room.remove_tag(TagName::Favorite).await?;
+ }
+ if !tags.contains_key(&TagName::LowPriority) {
+ room.set_tag(TagName::LowPriority, TagInfo::new()).await?;
+ }
+ }
+ room.join().await?;
}
- RoomType::Left => Ok(()),
+ RoomType::Left => {}
RoomType::Outdated => unimplemented!(),
RoomType::Space => unimplemented!(),
RoomType::Direct => {
if !room.is_direct() {
- // TODO: Mark as direct by adding it to account data
+ room.set_is_direct(true).await?;
}
if let Some(tags) = room.tags().await? {
@@ -638,10 +686,11 @@ impl Room {
}
room.join().await?;
- Ok(())
}
},
}
+
+ Result::<_, matrix_sdk::Error>::Ok(())
});
spawn!(
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]