Add methods for setting, getting and uploading avatar
parent
bca7f41ca9
commit
8dc56ec332
|
@ -74,7 +74,7 @@ use matrix_sdk_common::{
|
||||||
join_room_by_id, join_room_by_id_or_alias, kick_user, leave_room, Invite3pid,
|
join_room_by_id, join_room_by_id_or_alias, kick_user, leave_room, Invite3pid,
|
||||||
},
|
},
|
||||||
message::{get_message_events, send_message_event},
|
message::{get_message_events, send_message_event},
|
||||||
profile::{get_display_name, set_display_name},
|
profile::{get_avatar_url, get_display_name, set_avatar_url, set_display_name},
|
||||||
read_marker::set_read_marker,
|
read_marker::set_read_marker,
|
||||||
receipt::create_receipt,
|
receipt::create_receipt,
|
||||||
room::create_room,
|
room::create_room,
|
||||||
|
@ -478,6 +478,69 @@ impl Client {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets the mxc avatar url of the owner of the client, if set.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```no_run
|
||||||
|
/// # use futures::executor::block_on;
|
||||||
|
/// # use matrix_sdk::Client;
|
||||||
|
/// # use url::Url;
|
||||||
|
/// # let homeserver = Url::parse("http://example.com").unwrap();
|
||||||
|
/// # block_on(async {
|
||||||
|
/// # let user = "example";
|
||||||
|
/// let client = Client::new(homeserver).unwrap();
|
||||||
|
/// client.login(user, "password", None, None).await.unwrap();
|
||||||
|
///
|
||||||
|
/// if let Some(url) = client.avatar_url().await.unwrap() {
|
||||||
|
/// println!("Your avatar's mxc url is {}", url);
|
||||||
|
/// }
|
||||||
|
/// # })
|
||||||
|
/// ```
|
||||||
|
pub async fn avatar_url(&self) -> Result<Option<String>> {
|
||||||
|
let user_id = self.user_id().await.ok_or(Error::AuthenticationRequired)?;
|
||||||
|
let request = get_avatar_url::Request::new(&user_id);
|
||||||
|
let response = self.send(request).await?;
|
||||||
|
Ok(response.avatar_url)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sets the mxc avatar url of the client's owner. The avatar gets unset if `url` is `None`.
|
||||||
|
pub async fn set_avatar_url(&self, url: Option<&str>) -> Result<()> {
|
||||||
|
let user_id = self.user_id().await.ok_or(Error::AuthenticationRequired)?;
|
||||||
|
let request = set_avatar_url::Request::new(&user_id, url);
|
||||||
|
self.send(request).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Upload and set the owning client's avatar.
|
||||||
|
///
|
||||||
|
/// The will upload the data produced by the reader to the homeserver's content repository, and
|
||||||
|
/// set the user's avatar to the mxc url for the uploaded file.
|
||||||
|
///
|
||||||
|
/// This is a convenience method for calling [`upload()`](#method.upload), followed by
|
||||||
|
/// [`set_avatar_url()`](#method.set_avatar_url).
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```no_run
|
||||||
|
/// # use std::{path::Path, fs::File, io::Read};
|
||||||
|
/// # use futures::executor::block_on;
|
||||||
|
/// # use matrix_sdk::Client;
|
||||||
|
/// # use url::Url;
|
||||||
|
/// # block_on(async {
|
||||||
|
/// # let homeserver = Url::parse("http://locahost:8080").unwrap();
|
||||||
|
/// # let client = Client::new(homeserver).unwrap();
|
||||||
|
/// let path = Path::new("/home/example/selfie.jpg");
|
||||||
|
/// let mut image = File::open(&path).unwrap();
|
||||||
|
///
|
||||||
|
/// client.upload_avatar(&mime::IMAGE_JPEG, &mut image).await.expect("Can't set avatar");
|
||||||
|
/// # })
|
||||||
|
/// ```
|
||||||
|
pub async fn upload_avatar<R: Read>(&self, content_type: &Mime, reader: &mut R) -> Result<()> {
|
||||||
|
let upload_response = self.upload(content_type, reader).await?;
|
||||||
|
self.set_avatar_url(Some(&upload_response.content_uri))
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Add `EventEmitter` to `Client`.
|
/// Add `EventEmitter` to `Client`.
|
||||||
///
|
///
|
||||||
/// The methods of `EventEmitter` are called when the respective `RoomEvents` occur.
|
/// The methods of `EventEmitter` are called when the respective `RoomEvents` occur.
|
||||||
|
|
Loading…
Reference in New Issue