Browse Source

room-history: Implement Permalink creation for rooms

Enhances #891

Part-of: <https://gitlab.gnome.org/GNOME/fractal/-/merge_requests/1146>
merge-requests/1327/merge
Kirill Schmidt 4 years ago committed by Marge Bot
parent
commit
425891310f
  1. 4
      data/resources/ui/content-room-history.ui
  2. 27
      src/session/content/room_history/mod.rs
  3. 2
      src/session/room/mod.rs

4
data/resources/ui/content-room-history.ui

@ -12,6 +12,10 @@
<attribute name="action">room-history.invite-members</attribute>
<attribute name="hidden-when">action-disabled</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Room _Permalink</attribute>
<attribute name="action">room-history.permalink</attribute>
</item>
</section>
<section>
<item>

27
src/session/content/room_history/mod.rs

@ -20,7 +20,7 @@ use gtk::{
prelude::*,
CompositeTemplate,
};
use log::warn;
use log::{error, warn};
use matrix_sdk::ruma::events::room::message::{
EmoteMessageEventContent, FormattedBody, MessageType, RoomMessageEventContent,
TextMessageEventContent,
@ -40,7 +40,7 @@ use crate::{
room::{Room, RoomType, SupportedEvent, Timeline, TimelineItem, TimelineState},
user::UserExt,
},
spawn, toast,
spawn, spawn_tokio, toast,
utils::filename_for_mime,
};
@ -126,6 +126,12 @@ mod imp {
widget.try_again();
});
klass.install_action("room-history.permalink", None, move |widget, _, _| {
spawn!(clone!(@weak widget => async move {
widget.permalink().await;
}));
});
klass.install_action("room-history.details", None, move |widget, _, _| {
widget.open_room_details("general");
});
@ -558,6 +564,23 @@ impl RoomHistory {
}
}
pub async fn permalink(&self) {
if let Some(room) = self.room() {
let room = room.matrix_room();
let handle = spawn_tokio!(async move { room.matrix_to_permalink().await });
match handle.await.unwrap() {
Ok(permalink) => {
self.clipboard().set_text(&permalink.to_string());
toast!(self, gettext("Permalink copied to clipboard"));
}
Err(error) => {
error!("Could not get permalink: {}", error);
toast!(self, gettext("Failed to copy the permalink"));
}
}
}
}
/// Opens the room details on the page with the given name.
pub fn open_room_details(&self, page_name: &str) {
if let Some(room) = self.room() {

2
src/session/room/mod.rs

@ -399,7 +399,7 @@ impl Room {
.is_direct()
}
fn matrix_room(&self) -> MatrixRoom {
pub fn matrix_room(&self) -> MatrixRoom {
self.imp().matrix_room.borrow().as_ref().unwrap().clone()
}

Loading…
Cancel
Save