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,
|
||||
},
|
||||
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,
|
||||
receipt::create_receipt,
|
||||
room::create_room,
|
||||
|
@ -478,6 +478,69 @@ impl Client {
|
|||
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`.
|
||||
///
|
||||
/// The methods of `EventEmitter` are called when the respective `RoomEvents` occur.
|
||||
|
|
Loading…
Reference in New Issue